2013-08-14 6 views
15

Czy muszę przenieść moją funkcję getTemplates ze zwrotu lub czego?AngularJS: Z fabryki, jak mogę zadzwonić do innej funkcji

Przykład: Nie wiem co do zastąpienia "XXXXXXX" z (próbowałem "ten/self/templateFactory" etc ...):

.factory('templateFactory', [ 
    '$http', 
    function($http) { 

     var templates = []; 

     return { 
      getTemplates : function() { 
       $http 
        .get('../api/index.php/path/templates.json') 
        .success (function (data) { 
         templates = data; 
        }); 
       return templates; 
      }, 
      delete : function (id) { 
       $http.delete('../api/index.php/path/templates/' + id + '.json') 
       .success(function() { 
        templates = XXXXXXX.getTemplates(); 
       }); 
      } 
     }; 
    } 
]) 

Odpowiedz

37

Robiąc templates = this.getTemplates(); jesteś odnosząc się do właściwości obiektu to jeszcze nie jest utworzone.

Zamiast można stopniowo wypełniają obiekt:

.factory('templateFactory', ['$http', function($http) { 
    var templates = []; 
    var obj = {}; 
    obj.getTemplates = function(){ 
     $http.get('../api/index.php/path/templates.json') 
      .success (function (data) { 
       templates = data; 
      }); 
     return templates; 
    } 
    obj.delete = function (id) { 
     $http.delete('../api/index.php/path/templates/' + id + '.json') 
      .success(function() { 
       templates = obj.getTemplates(); 
      }); 
    } 
    return obj;  
}]); 
+0

Jest jeszcze jeden problem, 'templates = obj.getTemplates();' nie działa z powodu asynchronizacji. Możesz zmienić getTemplates, by zwrócić obietnicę, a potem ... wiesz to :) – zsong

6

Jak na ten temat?

.factory('templateFactory', [ 
    '$http', 
    function($http) { 

     var templates = []; 

     var some_object = { 

      getTemplates: function() { 
       $http 
        .get('../api/index.php/path/templates.json') 
        .success(function(data) { 
         templates = data; 
        }); 
       return templates; 
      }, 

      delete: function(id) { 
       $http.delete('../api/index.php/path/templates/' + id + '.json') 
        .success(function() { 
         templates = some_object.getTemplates(); 
        }); 
      } 

     }; 
     return some_object 

    } 
])