AngularJS:$ scope.watch无效

时间:2016-01-31 05:20:31

标签: javascript angularjs

我有一个元素a,用于存储已选中复选框的数量。它在我的部分更新。我可以访问我的控制器中的元素,但是,我需要将其设置为全局,因为它将被我的大多数控制器使用。我使用了$rootScope变量,并且每次使用a更新时都尝试将其设置为$scope.watch的值,但是,这不起作用。

部分:

<p>You have selected: {{ a =(categories | filter:{checked: true }).length }} JOSCOS</p>

    <ul class="a">
    <li ng-repeat="item in categories" >
      <input type="checkbox" class="chk" ng-model = "item.checked">{{item.info.ct}}
      </input>
      </li>
     </ul>
<a href = "#x1" ng-click = "al()">Start the test</a>

我的角度控制器:

myApp.controller('OneController', ['$scope', '$http', function($scope, $http) {
  $http.get('js/data/JOSCO.json').success(function(data) {
    $scope.categories = data;
  });
 $scope.a = 0
    $rootScope.cat = $scope.a;
    $scope.$watch('$scope.a',function () {
      $rootScope.cat = $scope.a;
   });
   $scope.al = function(){
      alert($scope.a); //outputs properly
   };
}]);

第二个控制器(我对此有不同的部分):

myApp.controller('DetailsController', ['$scope','$rootScope' ,function($scope, $rootScope) {

  $scope.catno = $rootScope.cat;
  alert($scope.catno);  //outputs as '0'
}]);

1 个答案:

答案 0 :(得分:3)

$scope.$watch接受多种不同方式来指定您将要观看的变量。您可以指定一个函数:

$scope.$watch(function(){return $scope.myvar}, someWatchHandler)

或直接发送变量:

$scope.$watch($scope.myvar, someWatchHandler)

或以字符串形式传递变量:

$scope.$watch('myvar', someWatchHandler)

您使用的是最后一个。请注意,您不需要在$scope前面添加前缀 - 如果这样做,它将找不到变量。只需从$scope移除$scope.a即可。