我正在尝试将$ scope变量设置为promise并在模板引擎中使用该scope变量,但它似乎不起作用。
在控制器中:
$scope.getUser = function() {
// I am returning a promise
// need this to be in a function so angular calls the function
// more than once as the promise may change if a new user logs in,
// i.e. myself is now someone new
return UserService.getMyself();
}
服务:
var userDeferred = $q.defer();
// Some other code here which resolves the promise.
// I have verified that the promise does get resolved.
service.getMyself = function () {
return userDeferred.promise;
};
在html中:
<button>
{{getUser().username}}
</button>
我是从角度文档中读到的:
$ q promises被模板引擎识别为angular 意味着在模板中,您可以将附加到范围的承诺视为 如果它们是结果值。
但是我想我误解了这个并且我使用了这个错误。我有函数返回,因为用户可以更改(保证更改),我希望我的模板引擎能够接收到关于promise的更改的事实(即我创建了一个新的promise,因为用户已更改,我希望我的模板能够看到了。
编辑:
这是一个展示我想要获得的东西: http://plnkr.co/edit/6J9pWY?p=preview
答案 0 :(得分:0)
我不确定什么不适合你(你没有提供足够的信息)但这里有一个示例代码似乎有用:
http://embed.plnkr.co/Ve5KV8m1UbVHeAtpTjFK/preview
<强>的Javascript 强>
angular.module('myModule', [])
.factory('UserService', function($q, $timeout) {
var getMyself = function() {
var userDeferred = $q.defer();
$timeout(function() {
userDeferred.resolve({username: 'root'});
}, 2000);
return userDeferred.promise;
};
return {
getMyself: getMyself
};
})
.controller('HelloCtrl', function($scope, UserService) {
$scope.user = UserService.getMyself();
});
<强> HTML 强>
<body ng-app="myModule" ng-controller="HelloCtrl">
<h1>User:</h1>
{{user.username}}
</body>