我刚开始使用AngularJS,我仍然在努力了解创建服务。从this和this开始,我的理解是只要对变量的更改在Angular中,就不需要$ watch。我从here复制了代码,并对其进行了修改,以确定我是否可以使用我的第一个服务:
myApp.factory('ListService', function() {
var ListService = {};
var list = ['a', 'b', 'c'];
ListService.addItem = function(item) { list.push(item); }
ListService.size = function() { return list.length; }
ListService.size1 = list.length;
return ListService;
});
function Ctrl1($scope, ListService) {
$scope.message = ListService.size();
$scope.addItem = function(){
ListService.addItem('d');
console.log("size() is " + ListService.size());
console.log("size1 is " + ListService.size1);
}
}
function Ctrl2($scope, ListService) {
$scope.message = ListService.size1;
}
html很简单:
<div ng-controller="Ctrl1"> Count is: {{ message }}
<input type="button" ng-click="addItem">
</div>
<div ng-controller="Ctrl2"> Count is: {{ message }}
</div>
单击按钮时,控制台日志显示正确的计数,但“消息”保持不变。原始代码应该是人为的,旨在表明可以使用服务来跨控制器共享代码。
所以我的问题是,为什么这不起作用?如果我错过了一些非常简单的事情,我会道歉。我是一个初学者,我仍然想要抓住一些东西。
答案 0 :(得分:0)
相反
$scope.message = ListService.size();
尝试
$scope.getCount = function () {
return ListService.size();
};
然后在视图中:
Count is: {{getCount()}}
这是因为你的$ scope.message是原始值,包含控制器初始化时ListService的大小。
(我的英语口语真的很糟糕,很抱歉简短回答)。