Javascript 即使ng show为true,ng hide也不会从类中删除
要求:显示和隐藏div HTMLJavascript 即使ng show为true,ng hide也不会从类中删除,javascript,angularjs,Javascript,Angularjs,要求:显示和隐藏div HTML 如果我正确理解您的问题,我会将您的HTML更改为显示 我的Div内容 然后在你的角度文件中 $scope.login = function () { if(<!-- logic to hide or show-->){ $scope.IsSuccess = false; }else{ $scope.IsSuccess = true; } } 希望这会有所帮助。因为
如果我正确理解您的问题,我会将您的HTML更改为显示 我的Div内容 然后在你的角度文件中
$scope.login = function () {
if(<!-- logic to hide or show-->){
$scope.IsSuccess = false;
}else{
$scope.IsSuccess = true;
}
}
希望这会有所帮助。因为authDataService.authenticateUser返回的承诺看起来不在angular上下文中,angular不知道作用域何时更改。在这种情况下,您需要添加$scope。$apply
**编辑:扩展解释**
因为你问了更多关于这方面的细节,我将尝试进一步解释
在角度上下文之外时需要调用。以下是我所说的角度之外的意思:
$scope.login = function() {
// inside angular context
console.log('a');
setTimeout(function() {
// outside angular context
console.log('b');
$scope.hello = 'b';
// $scope.$apply() needs to be called
$scope.$apply();
}, 1000);
// inside angular context
console.log('c');
$scope.hello = 'c';
};
在本例中,以下是日志的输出:
a
c
// $scope.$apply() is assumed at this point
b
Angular知道在处理完$scope.login的最后一行后需要调整其绑定,因此假定$scope.$apply,但Angular不知道您是否有任何其他回调函数,稍后可能会通过另一个上下文调用,另一个上下文是setTimeout或jQuery的$.ajax或$.Deferred,等等。如果不同的上下文修改了$scope,那么您需要调用$scope。$apply来手动更新角度绑定。HTML代码:
<button class="show-more-btn ng-hide" ng-show="hasMoreItemsToShow()" ng-click="showMoreItems()"">Show More</button>
我认为没有必要添加class='ng-hide',ngShow指令自己处理这个问题。是的,我没有添加那个类。这是由ng show处理的。请仔细阅读加载页面时,ng show会自动添加该页面。希望它能澄清您的疑问您的代码示例中没有$scope.issucess,对吗?我想知道issucess是从哪里来的,或者是im盲的,或者是没有在您的controllery中定义,您已经很好地理解了它。但是这个解决方案不起作用。为什么它会被认为是。我的意思是ng hide还在那里看看。我认为这会有帮助。一个看起来像是在角度上下文之外的承诺-这样的承诺到底是什么样子的?如果使用$。例如Deferred,当然可以,但看这段代码看不出来^^太棒了!!它起作用了。“你能详细说明一下它是如何工作的吗?”当然,我编辑了答案以扩展解释。让我知道这是否清楚!
$scope.login = function () {
if(<!-- logic to hide or show-->){
$scope.IsSuccess = false;
}else{
$scope.IsSuccess = true;
}
}
if ($scope.message == 'Login failed') {
scope.IsSuccess= true;
}
else {
$scope.IsSuccess= false;
}
$scope.$apply();
$scope.login = function() {
// inside angular context
console.log('a');
setTimeout(function() {
// outside angular context
console.log('b');
$scope.hello = 'b';
// $scope.$apply() needs to be called
$scope.$apply();
}, 1000);
// inside angular context
console.log('c');
$scope.hello = 'c';
};
a
c
// $scope.$apply() is assumed at this point
b
<button class="show-more-btn ng-hide" ng-show="hasMoreItemsToShow()" ng-click="showMoreItems()"">Show More</button>
setTimeout(function(){ $('.show-more-btn').removeClass('ng-hide');
}, 3000);