无法让 restangular 工厂工作

Cant get restangular factory to work

我确定这是我在这里遗漏的一些简单的东西,但我无法让它工作.. 我想使用一个工厂,以便我可以在多个控制器中重用数据。

(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: Cannot read property 'getFriendList' of undefined"

编辑:我也试过了,https://github.com/mgonto/restangular#decoupled-restangular-service,但没有成功!

您必须在控制器的函数中注入 profileFactory 服务。

你的工厂定义不正确。为了向服务消费者提供工厂功能,您应该在功能中定义该代码的工厂,并且 return 该承诺将帮助您继续承诺链。

代码

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;
       });
      }
    }
})();