每次在我的服务中更新变量时,我都在尝试更新控制器中的变量。我正在使用$ scope。$ watch(),但遗憾的是只有最后一次更改正在生效。这是我使用的代码。有谁知道这有什么问题吗? 服务:
rApp.factory('pService', ['$http', '$rootScope', '$sanitize',
function ($http, $rootScope, $sanitize) {
var pService = {};
//Some other code
pService.Update=function(status)
{
if(status.LastItemId!=undefined)
{
pService.disItemId = status.LastItemId;
}
}
//Some other code
return pService;
});
Controller:
rApp.controller('dController', ['$scope','$rootScope' 'pService' ,dispenseController]);
function dController($scope,$rootScope, pService) {
$scope.$watch(function () { return pService.disItemId }, function (newVal, oldVal) {
if (newVal != oldVal) {
$scope.lastItemId = pService.disItemId;
}
})
});
答案 0 :(得分:0)
您不需要使用$ watch。实际上你在标准角度应用中没有使用$ watch。
只需在您的控制器中执行此操作:
$scope.lastItem = pService;
然后像这样使用var:
$scope.lastItem.disItemId;
这将始终指向更新的disItemId。
如果你像这样绑定var:
<强>服务强>
[...]
service.serviceVar = 1;
return service
[...]
这将创建带引用的“1”var。
<强>控制器强>
[...]
$scope.myvar = Service.serviceVar;
[...]
这会将$ scope.myvar绑定到“1”引用。
如果您在服务中或在其他控制器中执行此操作:
service.serviceVar = 2;
您将使用新引用创建一个新的var“2”,并将此引用分配给service.serviceVar。对旧的1 var的所有旧引用都不会更新。
<强>解决方案强>
为避免这样做:
<强>服务强>
[...]
service.servicevar = {};
service.servicevar.value = 1;
return service
[...]
使用新引用创建对象并将其分配给servicevar。您创建一个var“1”并将其分配给servicevar.value。
<强>控制器强>
[...]
$scope.myvar = Service.servicevar;
[...]
将servicevar引用分配给范围var。
查看强>
{{myvar.value}}
您可以使用var。
的属性来使用该值更新var执行此操作:
service.servicevar.value = 2;
您将使用新引用创建一个新的var“2”,并用此引号替换旧引用。
但是这次你在控制器中保存了对servicevar的所有引用。
我希望我很清楚它能解决你的问题。
修改强>
我的回答只是对这个问题的部分答案。
以下是更新plunker
首先,您在控制器定义上有一个类型。你太早关闭大括号了。这是好的定义
app.controller('MainCtrl',['$scope','pService',
function MainCtrl($scope,pService) {
$scope.serviceVar=pService.myVar;
$scope.val = $scope.serviceVar;
}]);
然后您在角度中使用windows.interval
,而您需要使用$interval
服务
示例:
app.factory('pService',function($interval){
var pService={};
pService.myVar={};
pService.myVar.count=1;
$interval(function(){
pService.myVar.count++;
},1000);
return pService;
});
然后我的问题就出现了。您绑定了值而不是控制器中的对象。它现在看起来像这样:
$scope.val = $scope.serviceVar;
希望它能帮到你