我有两个控制器。我在父控制器中定义了一个$ rootScope变量,并根据点击的下拉列表进行更改。
我希望更改能够反映在子控制器中。
家长控制器
$rootScope.variable = {'attr1':true, 'attr2':false, 'attr3':false}//initializing
vm.clickedDropDown = function(index) {
$rootScope.variable = {'attr1':false, 'attr2':false, 'attr3':false }
switch (index) {
case 1:
$rootScope.variable={'attr1':true, 'attr2':false, 'attr3':false}
break;
case 2:
$rootScope.variable={'attr1':false, 'attr2':true, 'attr3':false}
break;
case 3:
$rootScope.variable={'attr1':false, 'attr2':false, 'attr3':true}
break;
}
}
儿童控制器
$rootScope.$watch($rootScope.variable,function(){
console.log($rootScope.variable);
console.log("changed");
},true)
变量正在变化,我能够看到变量的变化作为输出。
答案 0 :(得分:3)
你的手表错了。
或者:
$rootScope.$watch('variable' ,function(){
console.log($rootScope.variable);
console.log("changed");
},true);
或
$rootScope.$watch(
function() {
return $rootScope.variable;
},
function(){
console.log($rootScope.variable);
console.log("changed");
},true);
答案 1 :(得分:0)
您可以简单地使用范围,因为子控制器将继承父控制器并且可以访问范围和rootScope中定义的任何范围变量
HTML:
.waitFor()
JS:
<div ng-controller="MyCtrl">
<input type="text" ng-model="name">
<div ng-controller="ChildCtrl">
<pre>{{ debug }}</pre>
</div>
</div>