我正在尝试找到一种方法来创建一个服务,该服务可以位于我的最高级别范围并保存变量,例如用户状态和其他任何内容。
现在我正在尝试创建一个将数字绑定在一起的简单示例。然而,除非我强制我的角度再次获得值,否则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;
}
})();
答案 0 :(得分:0)
数字,字符串和其他基本类型作为值传递,而不是引用,因此您获得实际数字(即7)而不是Service.number的地址。
我知道绕过这个的唯一方法就是返回一个对象,并在其上使用一个属性。
答案 1 :(得分:0)
这是因为CodeExtensionList
是number
的原始属性。将Service
(这是一个原语)设置为等于$scope.number
(也是一个原语)是ByVal,而不是ByRef。
将SampleService.number
对象本身添加到SampleService
会创建引用,并返回属于{{1}的任何对象 }。以下是引用服务而不仅仅是单个基本属性的一个示例:
$scope