$ rootScope。$ watch不使用Angularjs中的对象

时间:2015-12-09 18:25:38

标签: angularjs

我有两个控制器。我在父控制器中定义了一个$ 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)

变量正在变化,我能够看到变量的变化作为输出。

2 个答案:

答案 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>

jsfiddle:http://jsfiddle.net/heavyhorse/aqbhco7m/