Angularjs根镜注射不';如预期的那样传播

Angularjs根镜注射不';如预期的那样传播,angularjs,Angularjs,我正在尝试更改$rootScope变量的值,并让该变量可以由具有更新值的各种控制器访问。然而,由于某种原因,$rootScope中更改的值似乎没有被任何通过$rootScope访问它的控制器检测到 在本例中,为什么“child”不反映更改的值 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script> document.write('<base

我正在尝试更改$rootScope变量的值,并让该变量可以由具有更新值的各种控制器访问。然而,由于某种原因,$rootScope中更改的值似乎没有被任何通过$rootScope访问它的控制器检测到

在本例中,为什么“child”不反映更改的值

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.15/angular.js" data-semver="1.2.15"></script>
  <script type="text/javascript">
    angular.module('myApp', [])
      .run(function($rootScope) {
        $rootScope.current = 'a';
      })
      .controller('ParentCtrl', ['$scope', '$rootScope',
        function($scope, $rootScope) {
          $scope.child = $rootScope.current;
        }
      ])
  </script>
</head>

<body ng-app="myApp">
  <div>
    <p>Value of "current": {{ current }}</p>
    <button ng-click="$root.current = 'b'">Change value to 'b'</button>
    <div ng-controller="ParentCtrl">
      Value of "current" (within ParentCtrl): {{ current }}
      <br>Value of "child" (via ParentCtrl injection of rootscope): {{ child }}
    </div>
  </div>
</body>

</html>

文件。写(“”);
angular.module('myApp',[])
.run(函数($rootScope){
$rootScope.current='a';
})
.controller('ParentCtrl',['$scope','$rootScope',
函数($scope,$rootScope){
$scope.child=$rootScope.current;
}
])
“current”:{{current}}的值

将值更改为“b” “current”的值(在ParentCtrl内):{{current}
“child”的值(通过根范围的ParentCtrl注入):{{child}

这是我的名片。提前谢谢

这种方法应该有效,请查看Angularjs范围文档以更好地理解


文件。写(“”);
angular.module('myApp',[])
.run(函数($rootScope){
$rootScope.current='a';
})
.controller('ParentCtrl',['$scope','$rootScope',
函数($scope,$rootScope){
$scope.root=$rootScope;
}
])
“当前”的值:{{current}

将值更改为“b” “current”的值(在ParentCtrl内):{{current}
“child”的值(通过根范围的ParentCtrl注入):{{root.current}
您必须注意下面的rootScope变量

 $scope.$watch(function() {
            return $rootScope.current;
          }, function() {
              $scope.child = $rootScope.current;
            }, 
          true);

这是工作表。您可以阅读有关$watch的更多信息,因为您的ng单击没有更新子变量。您的子变量已初始化,但从未更新过。@TechCrunch我对更改子变量不感兴趣,但是…我对自动更新子值以反映它所指向的“当前”变量感兴趣。是否有其他机制用于观察$rootScope的更改?是的,您应该使用$watch或$WatchCollectionThank;这正是我所需要的!
 $scope.$watch(function() {
            return $rootScope.current;
          }, function() {
              $scope.child = $rootScope.current;
            }, 
          true);