我有一个元素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'
}]);
答案 0 :(得分:3)
$scope.$watch
接受多种不同方式来指定您将要观看的变量。您可以指定一个函数:
$scope.$watch(function(){return $scope.myvar}, someWatchHandler)
或直接发送变量:
$scope.$watch($scope.myvar, someWatchHandler)
或以字符串形式传递变量:
$scope.$watch('myvar', someWatchHandler)
您使用的是最后一个。请注意,您不需要在$scope
前面添加前缀 - 如果这样做,它将找不到变量。只需从$scope
移除$scope.a
即可。