我正在努力使用我从控制器中的'get'获得的值。
这是我控制器中的代码
<main role="main">
<article><!-- or section? -->
(articles here)
</article>
<aside class="sidebar">
(sidebar here)
</aside>
</main>
当我在vm.user;
function onInit(){
loadUser(vm.queryParams.id[0]);
console.log(vm.user);
}
function loadUser(UserId) {
var defer = $q.defer();
User.get({ id: userId }).$promise.then(function (user) {
vm.user = user;
defer.resolve();
});
return defer.promise;
};
中打印vm.user
时,它未定义。当我查看调用vm.user的视图时,它只显示用户的正确值。所以在控制器中的onInit()
之后不知道它,但它在我看来。
我想首先“获取”用户,然后将其用于loadUser()
中的进一步逻辑。如何正确检索用户以便我可以进一步使用它并在onInit()
?
答案 0 :(得分:1)
你必须等到loadUser()
的执行完成才能获得user的值。你可以使用这样返回的promise,并对其进行任何计算。
vm.user;
function onInit(){
var promise=loadUser(vm.queryParams.id[0]);
promise.then(function(response){
console.log(response);
});
}
function loadUser(UserId) {
var defer = $q.defer();
User.get({ id: userId }).$promise.then(function (user) {
vm.user = user;
defer.resolve(vm.user);
});
return defer.promise;
};
答案 1 :(得分:0)
立即调用控制器开头的init函数,并将loadUser函数转换为服务,因为它是一个get动作。您的服务将返回您可以设置的用户。
(在控制器顶部声明):
init();
function init(){
loadUserService.loadUser(UserId)
.then(function (user) {
vm.user = user;
defer.resolve();
})
}