【问题标题】:AngularJS, $resource, get the object from .query()AngularJS,$resource,从 .query() 中获取对象
【发布时间】:2016-09-02 09:37:33
【问题描述】:

需要从 .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 id,问题 - 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() 请求...

【问题讨论】:

  • 您的 console.log 不在 aysnc 请求范围内。请把它放在里面看看打印结果与否
  • 是的,打印出来了,但是我怎样才能让这个对象脱离请求呢?尝试了很多方法,但仍然找不到解决方案……还是只需要在此请求中进行所有操作?
  • 检查更新的答案

标签: javascript angularjs angularjs-scope


【解决方案1】:

来自https://docs.angularjs.org/api/ngResource/service/$resource

HTTP GET “类”操作:Resource.action([parameters], [success], [错误])

你应该写:

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

【讨论】:

  • 是的,它可以工作,与我的脚本相同,但我需要在控制器范围内获取 vm.user 对象,但超出了请求。是否可以? :)
  • 我不确定我是否理解,但如果您需要在某个操作之前填充 vm.user 的值,则需要在承诺解决后调用该操作。如果您只想定义 vm.user,您可以在控制器顶部声明 is 为空对象。
【解决方案2】:

你需要声明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
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多