Javascript 即使ng show为true,ng hide也不会从类中删除

Javascript 即使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; } } 希望这会有所帮助。因为

要求:显示和隐藏div

HTML


如果我正确理解您的问题,我会将您的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);