2016-11-05 4 views
0

это мой завод, и я хочу, чтобы позвонить в GetData saveData.Here мой кодКак вызвать функцию в angularjs заводе

.factory('dataSyncOperation', function($q,$http){ 
return { 
    getData:function(){ 
     var q = $q.defer(); 
     var config = { 
        headers : { 
         'Content-Type': 'application/json' 
        } 
       } 
     $http.get(api+'/sync/').then(function(response){ 
      q.resolve(response); 
     },function(error){ 
      q.reject(); 
     }) 
     return q.promise; 

    }, 

    saveData:function(){ 

    } 

} 

}); Как я могу использовать обещание, возвращенное getData в saveData.

ответ

2

Вы всегда можете сделать, что-то вроде этого -

saveData:function(){ 
    this.getData().then(function(response){ // you can handle getData promise here 
    // on success 
    }, function(reject){ 
    // on failure 
    }); 
} 

внутри метода saveData, дайте мне знать, если это то, что то, что вы ищете.

Рабочий пример - http://plnkr.co/edit/y8WZQT8SvOAWpKj8Jgxs?p=preview

код -

// Code goes here 

var myApp = angular.module('myApp', []); 

myApp.controller('mainCtrl', function($scope, testService){ 
    testService.saveData().then(function(res){ 
    $scope.test = res.data; 
    }); 
}) 

myApp.factory('testService', function($q, $http){ 
    return { 
     getData:function(){ 
     var q = $q.defer(); 
     $http.get('data.json').then(function(response){ 
      q.resolve(response); 
     }, function(error){ 
      q.reject(); 
     }) 
     return q.promise; 
     }, 
     saveData:function(){ 
     return this.getData(); 
     } 
    } 
}) 
1

Я не должен объявлять все функции в литерала объекта возвращается. Вы можете сделать что-то вроде этого:

factory('dataSyncOperation', function($q,$http){ 

    function getData(){ //you can declare function inside function and it will be avaible only inside scope of outer function 
     var q = $q.defer(); 
     var config = { 
        headers : { 
         'Content-Type': 'application/json' 
        } 
       } 
     $http.get(api+'/sync/').then(function(response){ 
      q.resolve(response); 
     },function(error){ 
      q.reject(); 
     }) 
     return q.promise; 

    } 

    getData(); //call get data 

    function saveData() { 
      myPrivateFunction(); 
      getData(); //call get data inside save data 
    } 

    function myPrivateFunction(){ //you can even have private functions not avaible from outside 

    } 

    return { //declare which functions will be available from outside 
     getData:getData, 
     saveData:saveData 

     } 
}); 

Этот способ даже преподносятся. Пожалуйста, посмотрите на angular's style guide.

Смежные вопросы