1
我有一個角度服務,從一個工廠做REST調用得到一個$http
承諾,工作正常:角服務和看一個變量
var UserService = function($cookies, DataFactory, jsonHelper, $q) {
var USER_KEY = 'user';
var USERNAME_KEY = 'username';
var svcData = {
u: null,
b: null,
}
var service = {
setUser : function(user){
svcData.u = user;
$cookies.put(USER_KEY, user.id);
},
getUser : function(){
if(svcData.u === null){
DataFactory.getPrincipalName().then(function(adata){
DataFactory.getBDUser(adata.data.username).then(function(data){
var reg = {};
jsonHelper.setupRegistry(data.data,
reg);
jsonHelper.resolveReferences(
data.data, reg, 5);
console.log("Request is back");
svcData.u = data.data;
});
});
}
return svcData.u;
}
... snipped ...
在我的控制,我做的:
$scope.$watch($scope.user, function(newUser){
console.log($scope.user);
console.log("USER HERE");
doSomeStuff();
});
$scope.user = UserService.getUser();
問題是,當我第一次分配$scope.user
(它爲空)時,手錶被觸發,然後我得到控制檯消息「請求回來」,但手錶功能不會再次觸發。
爲什麼,我該怎麼做?
OK,的getUser檢查它的查詢,之前用戶我怎麼返回,如果一個承諾我有一個「緩存」命中,不必查詢用戶? – mikeb
見https://plnkr.co/edit/nzq9O0JMTxn1k7FL9We5。增加了一個使用promise的例子(角度爲'$ q'模塊) –