2016-04-19 6 views
1

Ich versuche Jhon Papa's Angular 1 Style Guide zu verwenden, um eine Fabrik in Angularjs zu erstellen. Das Problem ist, dass, wenn ich eine Funktion in ein Objekt kapsle und dann dieses Objekt zurückgebe, die Funktion nicht aufgerufen wird.Jhon Papa Winkelstil guide Factory - Funktion im Objekt nicht ausgeführt

Zum Beispiel

Funktioniert nicht

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

Wenn ich das Objekt zu entfernen, die die Funktion hält es funktioniert.

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

Antwort

1

Es gibt einen Unterschied, um das erste Beispiel, das Sie popularMovies.popularMovies(); in der zweiten zu schreiben haben Zugriff Sie nur popularMovies() schreiben kann. Das ist der Grund warum ein Beispiel nicht funktioniert. Weil das erste Beispiel Ihnen ein Objekt mit popularMovies() als Mitglied zurückgibt. Zweites Beispiel gibt direkt die $resource

-1

Die Reihenfolge der Rückgabeanweisung und der Funktion wechseln. popularMovies wird zum Zeitpunkt der Rückkehr undefined:

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

Ich glaube nicht, dass das das Problem ist, Funktionen * in Javascript gehißt *. – pietrovismara

+0

@Cuz hat Recht. Das ist nicht das Problem. Das Problem ist, dass die Funktion die Ressource zurückgibt, aber sie wird nie aufgerufen –

+0

In der Tat, Sie haben Recht. Ich war verwirrt, Var als Funktion zu deklarieren, z. var popularMovies = function ... In diesem Fall funktioniert das Deklarieren der Variablen nach der Rückgabe nicht. – fikkatra

Verwandte Themen