AngularJs服务绑定未更新

AngularJs服务绑定未更新,angularjs,data-binding,Angularjs,Data Binding,我试图找到一种方法来创建一个服务,它可以位于我的最高级别范围内,并保存诸如用户状态等变量 现在我正在尝试创建一个简单的示例,其中我将数字绑定在一起。但是UI层永远不会更新,除非我强制我的angular再次获取值 如果删除表示getNumber()的行,就会看到html上的数字永远不会更新。我尝试调用$apply,但这给了我一个错误,一个已经生效 代码: $scope.update = function () { SampleService.update(); //Forcing

我试图找到一种方法来创建一个服务,它可以位于我的最高级别范围内,并保存诸如用户状态等变量

现在我正在尝试创建一个简单的示例,其中我将数字绑定在一起。但是UI层永远不会更新,除非我强制我的angular再次获取值

如果删除表示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;
}
})();

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


我所知道的避免这种情况的唯一方法是返回一个对象,并对其使用一个属性。

发生这种情况是因为
number
Service
的一个基本属性。将
$scope.number
(原语)设置为等于
SampleService.number
(原语)由val而不是ByRef完成

SampleService
对象本身添加到
$scope
将创建一个引用,并返回属于
SampleService
属性的任何对象。以下是引用服务而不仅仅是单个基元属性的一个示例:

$scope.service = SampleService;

{{service.number}}

我认为这就是我在服务的底层所做的,在那里我返回可变服务。因为在控制器中,我可以调用SampleService上的方法,这些方法在SampleService级别的服务内部公开。我刚刚发现了这一点,但我没有存储$scope.Service=SampleService,而是这样做,$scope.State=SampleService.getData(),它从SampleService返回服务对象。我们的两种类似但不同的方法有什么好处或坏处吗?直接设置与使用
getData()
的唯一区别在于,通过使用
getData()
函数,您的服务不必返回任何内容。感谢您回答此问题和评论中的问题。我喜欢我的getData方法是因为我个人的原因,我可以从字面上看出我在期待我的数据。我想再次感谢你,因为解决了这个问题,我今天可以实现很多代码。如果你想看看我完成了什么,请访问app.baileysproject.com查看新功能