2016-05-17 61 views
0

我从本地主机获取JSON文件,我成功获取数据,当我登录控制台时可以看到它,但是当我在控制器中注入Factory时它返回一个空对象,这意味着变量erroMessages没有得到JSON对象,因为成功函数没有在工厂返回之前执行,请大家帮忙。

assetInModule.factory('helperFactory',function($http,$sce){ 
    'use strict'; 
    var title = "default"; 
    var errorMessages = {content:null}; 

    return { 

     title : function(){ return title;}, 

     setTitle : function(newNitle){title = newNitle;}, 

     getErrorMessages : function(){ 

      $http.get('http://127.0.0.1/assetinspa/public/js/helpers/error_messages.json') 
        .success(function(data){ 

        errorMessages = data; 

        }); 

       return errorMessages; 
     } 
    }; 
}); 

回答

2

尝试

assetInModule.factory('helperFactory',function($http,$sce){ 
 
'use strict'; 
 
var title = "default"; 
 
var errorMessages = {content:null}; 
 

 
return { 
 

 
    title : function(){ return title;}, 
 

 
    setTitle : function(newNitle){title = newNitle;}, 
 

 
    getErrorMessages : function(){ 
 
     return $http.get('http://127.0.0.1/assetinspa/public/js/helpers/error_messages.json'); 
 
    } 
 
}; 
 
});

angular.controller('YourCtrl', function ($scope, helperFactory) { 
 
    $scope.errorMessages = {}; 
 
    
 
    helperFactory 
 
    .getErrorMessages() 
 
    .success(function(data) { 
 
     $scope.errorMessages = data; 
 
    }); 
 
});

回报之前$ http.success发射结束

+0

返回d {$$状态:对象}当我控制台日志,我可以得到直接的对象,因为它返回此对象,它的第一个我看到它 – Teebo

+0

谢谢我忽略了最后的代码段,它工作,它第一次得到stackOverflow帮助 – Teebo

1
"use strict"; 
assetInModule.factory("helperFactory", ["$http","$q", 
    function ($http, $q) { 


     var getErrorMessages = function() { 
      var deferred = $q.defer(); 
      $http.get('http://127.0.0.1/assetinspa/public/js/helpers/error_messages.json') 
       .success(function(data) { 
        deferred.resolve(data); 
       }); 

      return deferred.promise; 
     }; 

     return { 

      title: function() { return title; }, 

      setTitle: function (newNitle) { title = newNitle; }, 
      GetErrorMessages: getErrorMessages 
     } 
    } 
]); 

在使用的时候

helperFactory.GetErrorMessages().then(function(result){ 
//get the data 
}) 
+0

我很抱歉,但我正在学习,那么我如何获得我的控制器中的对象?该属性必须在调用 – Teebo

+0

时不使用自定义承诺,使用'$ q'(** BAD PATTERN **),利用'$ http'的承诺返回方法.. –

+0

问题解决了,谢谢各位! – Teebo

相关问题