AngularJs服务绑定不更新

时间:2017-02-17 14:40:09

标签: angularjs data-binding

我正在尝试找到一种方法来创建一个服务,该服务可以位于我的最高级别范围并保存变量,例如用户状态和其他任何内容。

现在我正在尝试创建一个将数字绑定在一起的简单示例。然而,除非我强制我的角度再次获得值,否则UI层永远不会更新。

如果你删除了说getNumber()的行,你会发现html上的数字永远不会更新。我试着调用$ apply,这给了我一个已经生效的错误。

代码:

$scope.update = function () {
        SampleService.update();

//Forcing the number to be updated by asking the service to return it
        $scope.number = SampleService.getNumber();

    };
//Why doesn't this force $scope.number to change as SampleServce.number changes?
    $scope.number = SampleService.number;

服务:

(function () {
'use strict';

angular
    .module('Services')
    .service('SampleService', SampleService);

SampleService.$inject = ['$http'];

function SampleService($http) {

    var Service = {
        number: 0
    };


    Service.update = function ()
    {
        Service.number += 1;
    };

    Service.getNumber = function ()
    {
        return Service.number;
    };

    return Service;
}
})();

2 个答案:

答案 0 :(得分:0)

数字,字符串和其他基本类型作为值传递,而不是引用,因此您获得实际数字(即7)而不是Service.number的地址。

我知道绕过这个的唯一方法就是返回一个对象,并在其上使用一个属性。

答案 1 :(得分:0)

这是因为CodeExtensionListnumber的原始属性。将Service(这是一个原语)设置为等于$scope.number(也是一个原语)是ByVal,而不是ByRef。

SampleService.number 对象本身添加到SampleService会创建引用,并返回属于{{1}的任何对象 }。以下是引用服务而不仅仅是单个基本属性的一个示例:

$scope

http://plnkr.co/edit/eWk8lZRa0dGIhd2I8h9t?p=preview