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