2016-04-19 6 views
1

Jhon Papa's Angularjsでファクトリを作成するための角度1スタイルのガイドです。問題は、オブジェクトに関数をカプセル化してからこのオブジェクトを返すと、関数が呼び出されないということです。私はそれが動作する機能を保持しているオブジェクトを削除した場合の例Jhon Papa角度スタイルガイドファクトリ - オブジェクトが実行されていないオブジェクト内の機能

については

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

答えて

1

、あなたはあなただけpopularMovies()を書くことができます第二にpopularMovies.popularMovies();を記述する必要が最初の例にアクセスすること。 1つの例が他の例を動作させない理由があります。最初の例ではpopularMovies()のメンバーを返します。 2番目の例は、直接を返します$resource

-1

return文と関数の順序を切り替えます。 popularMoviesは、復帰時に定義されていない:1つの違いがあり

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 
    }; 
} 
+1

私はそれが問題だとは思わない、機能はJavaScriptで*ホイスト*です。 – pietrovismara

+0

@Cuzが正しいです。これは問題ではありません。問題は、関数がリソースを返すが、決して呼び出されないということです。 –

+0

実際、皆さんは正しいです。私はvarを関数として宣言するのと混乱していました。 var popularMovies = function ...この場合、戻り値の後でvarを宣言することはできません。 – fikkatra

関連する問題