繁体   English   中英

我无法从.factory AngularJS 1.6访问对象的属性

[英]I can't access property of object from .factory AngularJS 1.6

我用.factory()创建了一个简单的AngularJS服务,名为$ getUser ,它从users.json获取数据:

{
    "john": {
        "name": "John",
        "address": "New York"
    },

    "bob": {
        "name": "Bob",
        "address": "Boston"
    }
}

现在我想在mainController中使用此数据:

angular.module('myApp', [])

.factory('$getUser', ['$http', function($http){
    var users = {};

    $http.get('users.json').then(
        function(response) {
            users.data = response.data;
        }
    );

    return users;
}])

.controller('mainController', ['$getUser', function($getUser){

    // I can access whole $getUser object
    console.log($getUser);

    // but when I want to access $getUser.data it gives me 'undefined'
    console.log($getUser.data);

}]);

当我想安慰整个$的getUser对象,它的工作原理,但我不能够访问$ getUser.data财产。 为什么?

将工厂创建为:

app.factory('$getUser', ['$http',  function($http) {

  var factory = {               
    query: function () {                
       return $http.get('users.json').then(function (response) {
          return response.data;                            
               }, function (result) {
                   alert("Error: No data returned");
              });             
            }
       }       
        return factory;
}]);

因此,您可以将其称为:

$scope.data = $getUser.query()

简单的演示小提琴


但是我建议返回承诺并在控制器中解决

加载JSON的常用方法是:

app.factory('Items', ['$http',
    function($http) {

        return {
            getJson: function(url) {
                var ItemsJson = $http.get(url).then(function(response) {
                    return response.data;
                });
                return ItemsJson;
            }
        }
    }
]); 

和用法:

 var jsonPromise = Items.getJson('jsonData/someJSON.json');
 jsonPromise.then(function (_response) {
 // ...
 }, function (error) {
     console.error(error);
 });

尝试这个:

 angular.module('myApp', [])

    .factory('$getUser', ['$http', function($http) {
      var users = {};
      return {
        getData: function() {
          return $http({
            url: 'users.json',
            method: 'GET'
          })
        }
      }
    }])

    .controller('mainController', ['$getUser', function($getUser) {

      // I can access whole $getUser object
      console.log($getUser);

      // but when I want to access $getUser.data it gives me 'undefined'
      console.log($getUser.data);
      $getUser.getData().then(function(data) {
        console.log(data.data);
      });

    }]);

小提琴链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM