Javascript $watch-method没有更改scope变量

Javascript $watch-method没有更改scope变量,javascript,angularjs,Javascript,Angularjs,在我的控制器中,我有一个$scope.var=[] 当我单击一个按钮时,这个数组将充满内容。 例如,$scope.var.length从0变为1 当数组被填充时,我想显示一个div,所以它有一个 ng-if="condition". 此条件也保存在控制器中: $scope.controller = false. 现在我希望在数组填充时更改该条件: $scope.$watch('var.length', function(){$scope.condition = true;}); 现在(重要

在我的控制器中,我有一个
$scope.var=[]
当我单击一个按钮时,这个数组将充满内容。 例如,
$scope.var.length
从0变为1

当数组被填充时,我想显示一个div,所以它有一个

ng-if="condition".
此条件也保存在控制器中:

$scope.controller = false.
现在我希望在数组填充时更改该条件:

$scope.$watch('var.length', function(){$scope.condition = true;});
现在(重要!),有第二个选项显示div:一个带有

ng-click="condition = !condition"
在测试中,ng click工作得很好,条件在true和false之间变化,但是当我用内容填充var=[]时,$watch方法不起作用。 感谢您的帮助和提示:)

//编辑 html:


文本层次结构

您可以只查看var本身,而不是var.length

请查看以下示例:

该守则—

   $scope.$watch('var', function(newVal, oldVal){
            console.log(newVal);
            if(newVal.length > 0 ){
                $scope.condition = true;
            }else{
                 $scope.condition = false;  
            }
        });
这应该对你有好处

或者,您可以查看var.length,但仍然需要一些if/else逻辑来检查newVal是否实际为0。大概是这样的:

  $scope.$watch('var.length', function(newVal, oldVal){
            if(newVal === 0){
             $scope.condition = false;  
            } else { 
             $scope.condition = true;   
            }
        });

这样的代码可能会导致几个问题。
您可以检查我的代码:

$scope.$watch('var.length',函数(newE){
如果(新建>0){
$scope.condition=true;
}
});

  • 变量更改数组的方式,如果它们相等,则必须重新初始化它。这不是一个非常聪明的想法,但从另一方面来说,你们必须确保你们的数组填充创建了新的数组,angular可以看到这一点
  • 在我的例子中,为了使其有可能更改范围,您必须使用
    $timeout
    ,因此请注意不要陷入
    $apply
    循环中
  • 好的,我做到了:

    更改
    ng单击=“条件=!条件”
    ng,请单击

    并在控制器中定义功能:

     $scope.reverse= function(){
                        $scope.condition= !$scope.condition;
                    };
    

    然后条件也在变化,因为它现在在相同的范围内。

    now<如果
    创建单独的作用域,则代码>ng。。。内联单击将采用当前的作用域级别-因此您可能在两个不同的作用域级别上定义了一个
    条件
    变量。发布你的HTML。你是如何“填充”数组的?这可能是您的问题。当我删除ng click=“condition=!condition”时,这就起作用了。所以问题必须解决there@samron你能把你的html贴出来吗?好的,我贴了,我想这是不一样的scopes@samron这是一个非常快速的测试,可以检查是否将ng更改为ng showI测试:watch功能正在工作:newVal正在更改!但情况并非如此
     $scope.reverse= function(){
                        $scope.condition= !$scope.condition;
                    };