$ watch - 方法没有改变范围变量

时间:2015-11-04 14:41:17

标签: javascript angularjs

在我的控制器中,我有$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-method不起作用。 感谢您的帮助和tipps:)

//修改 HTML:

<div class="row">
            <div ng-click="condition= !condition">
                <span class="glyphicon clickable" ng-class="{'glyphicon-down': !condition, 'glyphicon-up': condition}" ></span>
            </div>
            <div class="slideToggle" ng-if="condition">
            Text hier
            </div>
    </div>

3 个答案:

答案 0 :(得分:0)

你可以只看var而不是var.length

请查看此示例:http://jsfiddle.net/Lzgts/577/

代码 -

   $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;   
            }
        });

答案 1 :(得分:0)

这样的代码可能会导致一些问题 你可以检查我的代码:
plnkr
$scope.$watch('var.length', function(newE) { if (newE > 0) { $scope.condition = true; } });

  1. 你的var改变数组的方式,如果它们相等,你必须重新初始化它。这不是一个非常聪明的想法,但在其他方面,你必须确保数组填充创建新数组,角度可以看到。
  2. 为了让我有可能在我的情况下更改你必须使用$timeout的范围,所以要注意不要陷入$apply循环。

答案 2 :(得分:0)

好的,我做到了:

更改ng-click="condition = !condition"ng-click="reverse()"

并在控制器中定义函数:

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

然后条件也在变化,因为它现在处于同一范围内。