在控制器中使用get with ngResource中的值

时间:2017-06-28 13:50:24

标签: javascript angularjs ngresource

我正在努力使用我从控制器中的'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()

中调用其值

2 个答案:

答案 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();

            })
    }