Jhon Papa角度样式指南工厂 - 对象内部未运行的功能

时间:2016-04-19 10:59:42

标签: javascript angularjs

我正在尝试使用Jhon Papa's Angular 1样式指南在Angularjs中创建工厂。问题是,当我在一个对象中封装一个函数然后返回该对象时,该函数不会被调用。

例如

不起作用

 angular
  .module('movieCore')
  .factory('PopularMovies', factory);

factory.$inject = ['$resource'];

function factory($resource) {

  var service = {
    popularMovies: popularMovies
  };

  return service;

  function popularMovies() {
    var token = 'teddybear'; // TBC
        return $resource('popular/:movieId', { movieId: '@id' }, {
            update: {
                method: 'PUT',
                headers: { 'authToken': token }
            },
            get: {
                method: 'GET',
                headers: { 'authToken': token }
            },
            query: {
                method: 'GET',
                headers: { 'authToken': token }
            },
            save: {
                method: 'POST',
                headers: { 'authToken': token }
            },
            remove: {
                method: 'DELETE',
                headers: { 'authToken': token }
            }
        });
  }
}

如果我删除了保存其功能的对象。

angular
  .module('movieCore')
    .factory('PopularMovies', factory);

  factory.$inject = ['$resource'];
  function factory($resource) {

    var token = 'teddybear'; // TBC
    console.log('hey there');
        return $resource('popular/:movieId', { movieId: '@id' }, {
            update: {
                method: 'PUT',
                headers: { 'authToken': token }
            },
            get: {
                method: 'GET',
                headers: { 'authToken': token }
            },
            query: {
                method: 'GET',
                headers: { 'authToken': token }
            },
            save: {
                method: 'POST',
                headers: { 'authToken': token }
            },
            remove: {
                method: 'DELETE',
                headers: { 'authToken': token }
            }
        });
    };

2 个答案:

答案 0 :(得分:1)

有一个区别,要访问第一个示例,您必须在第二个示例popularMovies.popularMovies();中编写popularMovies()。这就是为什么一个例子不是另一个例子。因为第一个示例返回一个popularMovies()作为成员的对象。第二个示例直接返回$resource

答案 1 :(得分:-1)

切换return语句和函数的顺序。返回时popularMovies未定义:

angular
  .module('movieCore')
  .factory('PopularMovies', factory);

factory.$inject = ['$resource'];

function factory($resource) {

  function popularMovies() {
    var token = 'teddybear'; // TBC
        return $resource('popular/:movieId', { movieId: '@id' }, {
            update: {
                method: 'PUT',
                headers: { 'authToken': token }
            },
            get: {
                method: 'GET',
                headers: { 'authToken': token }
            },
            query: {
                method: 'GET',
                headers: { 'authToken': token }
            },
            save: {
                method: 'POST',
                headers: { 'authToken': token }
            },
            remove: {
                method: 'DELETE',
                headers: { 'authToken': token }
            }
        });
  }

  return {
    popularMovies: popularMovies
  };
}