2016-09-02 3 views
0

нужно получить один объект из .query(), сервис:

angular. 
    module('core.users'). 
    factory('User', ['$resource', 
    function($resource) { 
     return $resource('users/users.json', {}, { 
     query: { 
      method: 'GET', 
      isArray: true 
     } 
     }); 
     } 
    ]); 

компонент:

'use strict'; 

angular. 
    module('userDetail'). 
    component('userDetail', { 
    templateUrl: 'user-detail/user-detail.template.html', 
    controller: ['$routeParams', 'User', '$filter', 
     function TaskDetailController ($routeParams, User, $filter) { 
     var vm = this; 

     vm.id = parseInt($routeParams["id"], 10); 
     vm.users = User.query(function() { 
      vm.user = $filter('currentUser')(vm.users, vm.id); 
     }); 
     } 
    ], 

    controllerAs: 'vm' 
    }); 

нужно, чтобы получить один объект из массив, «CurrentUser», с $ routeParams ид, проблема - vm.user не определено в области контроллера, здесь

vm.users = User.query(function() { 
    vm.user = $filter('currentUser')(vm.users, vm.id); // all ok, i got the object 
    }); 
console.log(vm.user) // undefined 

это нормально для зрения, я могу отобразить свойства, бушель т нужен сделать .Put() запрос на сервер с сольным объектом, когда некоторые из пользователей реквизита изменились ...

+0

ваш console.log находится за пределами Асинхронный request.Please положить его внутрь и увидеть результат получения распечатаны или не –

+0

да, штампованные, но как я могу получить этот объект из запроса? попробуйте много способов, но все еще не можете найти решение ... или просто нужно сделать все операции в этом запросе? – vanless

+0

проверить обновленный ответ –

ответ

0

От https://docs.angularjs.org/api/ngResource/service/ $ ресурса

HTTP GET "класс" действия: Resource.action ([ параметры], [успех], [ошибка])

Вы должны написать:

vm.users = User.query(); 
vm.users.$promise.then(function(response){ 
    vm.user = $filter('currentUser')(vm.users, vm.id); 
    console.log(vm.user); // Should log the desired result 
}); 
console.log(vm.user); //This will be undefined since it is called before the promise is resolved 
+0

да, это работает так же, как мой скрипт, но мне нужен объект vm.user в области контроллера, вне запроса. Является ли это возможным? :) – vanless

+0

Я не уверен, что понимаю, но если вам нужно, чтобы значение vm.user было заполнено до определенного действия, вам нужно будет вызвать это действие после того, как обещание будет разрешено. Если вы просто хотите, чтобы 'vm.user' был определен, вы можете объявить его как пустой объект в верхней части контроллера. – Amygdaloideum

0

Вы должны объявить vm.user первый и положительный watch на это.

JS:

vm.user = {}; 

$scope.$watch(function() { 
    return vm.user; 
}, function(newVal, oldVal) { 

    console.log(newVal); //you can get new value here which is single object 
}) 

vm.users = User.query(function() { 
    vm.user = $filter('currentUser')(vm.users, vm.id); // all ok, i got the object 
}); 
Смежные вопросы