AngularJS - 非http服务不更新范围变量

时间:2013-04-01 08:22:18

标签: angularjs

我刚开始使用AngularJS,我仍然在努力了解创建服务。从thisthis开始,我的理解是只要对变量的更改在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>

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

所以我的问题是,为什么这不起作用?如果我错过了一些非常简单的事情,我会道歉。我是一个初学者,我仍然想要抓住一些东西。

1 个答案:

答案 0 :(得分:0)

相反

$scope.message = ListService.size();

尝试

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

然后在视图中:

Count is: {{getCount()}} 

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

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