在控制器中使用来自 ngResource 的 get 值

Using a value from a get with ngResource in the controller

我正在努力使用从我的控制器中的 'get' 获得的值。

这是我控制器中的代码

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;
};

当我在 onInit() 中打印 vm.user 时,它是未定义的。当我查看调用 vm.user 的视图时,它只显示了用户的正确值。所以它在控制器中的 loadUser() 之后不知道,但它在我看来。

我想先 'get' 用户,然后将其用于 onInit() 中的进一步逻辑。如何正确检索用户以便我可以进一步使用它并在 onInit()?

中调用它的值

您必须等到 loadUser() 的执行完成,以便获取 user.You 的值可以使用这样返回的承诺并对其进行任何计算。

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;
    };

立即在控制器的开头调用 init 函数,并将 loadUser 函数转换为服务,因为它是一个 get 操作。您的服务将 return 您随后可以设置的用户。

(在控制器顶部声明):

init();

function init(){
        loadUserService.loadUser(UserId)
            .then(function (user) {

                 vm.user = user;
                 defer.resolve();

            })
    }