如何在angularjs工厂调用函数

时间:2016-11-05 08:34:47

标签: javascript angularjs angular-promise

这是我的工厂,我想在saveData中调用getData。这是我的代码

.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返回的promise用于saveData。

2 个答案:

答案 0 :(得分:4)

你可以随时做这样的事情 -

saveData

// 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(); } } }) 方法中,请告诉我这是否是您正在寻找的内容。

工作示例 - http://plnkr.co/edit/y8WZQT8SvOAWpKj8Jgxs?p=preview

代码 -

var labels = Label[] { L1, L2, L3, ... }

public void HideNLabels(int n)
{
    foreach (Label label in labels.Take(n))
    {
        label.Hide();
    }
}

答案 1 :(得分: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