不能让restangular工厂工作

时间:2015-07-09 20:57:04

标签: angularjs factory restangular angular-promise angularjs-factory

我确定它很简单,我在这里失踪但是我无法让它发挥作用.. 我想使用工厂,以便我可以在多个控制器中重复使用数据。

(function() {
'use strict';

angular
    .module('www')
    .factory('profileFactory', profileFactory);

profileFactory.$inject = ['Restangular'];

/* @ngInject */
function profileFactory(Restangular) {

    var service = {
        getUserData: Restangular.one('/user/profile/').getList(),
        getFriendList: Restangular.all('api/users/getfriendsinvitations/').getList()
    };
    return service;

    }
})();

控制器:

(function() {
    'use strict';

    angular
        .module('www')
        .controller('ProfileController', ProfileController);

    ProfileController.$inject = ['profileFactory'];

    /* @ngInject */
    function ProfileController() {

      activate();

      function activate(profileFactory, $scope) {
       profileFactory.getFriendList.then(function (homeFriends) {
         $scope.homeFriends = homeFriends;
       });
      }
    }
})();

我一直在" TypeError:无法读取属性' getFriendList'未定义"

编辑:我也试过这个,https://github.com/mgonto/restangular#decoupled-restangular-service,但没有运气!

2 个答案:

答案 0 :(得分:1)

您的工厂未正确定义。为了使服务用户可以获得工厂功能,你应该在功能中定义工厂代码,并返回那个应用将帮助你继续承诺链。

<强>代码

function profileFactory(Restangular) {

    var service = {
        getUserData: function(){
           return Restangular.one('/user/profile/').getList();
        },
        getFriendList: function(){
           return Restangular.all('api/users/getfriendsinvitations/').getList();
       }
    };
    return service;
}

<强>控制器

(function() {
    'use strict';

    angular
        .module('www')
        .controller('ProfileController', ProfileController);

    ProfileController.$inject = ['profileFactory', '$scope'];

    /* @ngInject */
    function ProfileController(profileFactory, $scope) { //<==added dependancy here

      activate();

      function activate() {
       profileFactory.getFriendList().then(function (homeFriends) {
         $scope.homeFriends = homeFriends;
       });
      }
    }
})();

答案 1 :(得分:0)

您必须在控制器的功能中注入profileFactory服务。