1

我刚刚开始使用 AngularJS,但我仍在尝试了解创建服务。从thisthis来看,我的理解是只要变量的变化在 Angular 内部,就不需要 $watch 了。我从这里复制了代码,并对其进行了修改以查看是否可以使我的第一个服务正常工作:

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>

单击按钮时,控制台日志显示正确的计数,但“消息”保持不变。原始代码应该是人为设计的,旨在表明服务可用于跨控制器共享代码。

所以我的问题是,为什么这不起作用?如果我错过了一些非常简单的事情,我深表歉意。我是一个初学者,我仍在努力掌握一些东西。

4

1 回答 1

0

反而

$scope.message = ListService.size();

尝试

$scope.getCount = function () {
    return ListService.size();
};

然后在视图中:

Count is: {{getCount()}} 

这是因为您的 $scope.message 是原始值,其中包含控制器初始化时 ListService 的大小。

(我的英语真的很糟糕,很抱歉简短的回答)。

于 2013-04-01T12:07:46.787 回答