向angularjs/javascript中的命名回调函数传递参数时出现问题

向angularjs/javascript中的命名回调函数传递参数时出现问题,javascript,angularjs,callback,Javascript,Angularjs,Callback,我想将angularjs$http success回调函数计算出来,这样我就没有了两个(或N个)匿名回调函数,而是有了一个名为的回调函数 以下是两个控制器: function CreateCurriculumCtrl($scope, $http, $location, select2Options){ $scope.curriculumInfo = {}; $scope.curriculumInfo.statusOK = true; $scope.select2Opti

我想将angularjs$http success回调函数计算出来,这样我就没有了两个(或N个)匿名回调函数,而是有了一个名为的回调函数

以下是两个控制器:

function CreateCurriculumCtrl($scope, $http, $location, select2Options){

    $scope.curriculumInfo = {};
    $scope.curriculumInfo.statusOK = true;
    $scope.select2Options = select2Options; 

    $scope.saveCurriculum = function(){
        $http.post('bignibou/curriculum/new', $scope.curriculumInfo).success(function(curriculumInfo) {
            if(curriculumInfo.statusOK == true){
                $scope.curriculumInfo.statusOK=true;
                $location.path('/view/'+curriculumInfo.curriculum.id);
            }
            else{
                $scope.curriculumInfo.statusOK = false;
                $scope.curriculumInfo.errors = curriculumInfo.errors;
            }           
        });
    };
}

function EditCurriculumCtrl($scope, $http, $location, select2Options, $routeParams){

    $scope.curriculumInfo = {};
    $scope.curriculumInfo.statusOK = true;
    $scope.select2Options = select2Options;
    $scope.id = $routeParams.id;

    $http.get('/bignibou/utils/findCurriculumById.json',{params: {id: $routeParams.id}}).success(
            function(curriculum){
                $scope.curriculumInfo.curriculum = curriculum;
            });

    $scope.editCurriculum = function(){
        $http.post('bignibou/curriculum/edit/'+$routeParams.id, $scope.curriculumInfo)
        .success(function(curriculumInfo) {
            if(curriculumInfo.statusOK == true){
                $scope.curriculumInfo.statusOK=true;
                $location.path('/view/'+curriculumInfo.curriculum.id);
            }
            else{
                $scope.curriculumInfo.statusOK = false;
                $scope.curriculumInfo.errors = curriculumInfo.errors;
            }           
        });
    };
}
我不知道该怎么做,因为命名回调函数有两个依赖项(即$scope和$location)。

如果我从angularjs控制器中提取函数(名为callback),那么 回调不再具有对其依赖项的访问权限


任何人都可以帮助分解成功回调函数并确保满足依赖关系吗?

您可能希望创建angularjs服务并在单击某个按钮时调用特定请求。通过这种方式,您可以以同步方式调用请求。

您可能希望创建angularjs服务,并在单击某个按钮时调用特定的请求。通过这种方式,您可以以同步方式调用请求。

创建一个课程服务,并将每个对后端的调用重构为它。 控制器不应该关心如何获取数据。将课程服务注入控制器。然后,控制器只需调用课程服务上的函数并获取数据

angular.module('resources.curriculum', ['..'])
.factory('Curriculum', function ($http, $q) {
  return {
    create: function(dataToSave) {
      var deferred = $q.defer()

      http.get('...').success(function(data) {
        deferred.resolve(data)
      }).error(function(err) {
        deferred.reject(err)
      })
      return deferred.promise
    }
  }
})
.controller('SomeCtrl', function($scope, Curriculum) {
  $scope.someValue = Curriculum.create($scope.someDataToSave)
})

创建一个课程服务,并将每个对后端的调用重构到其中。 控制器不应该关心如何获取数据。将课程服务注入控制器。然后,控制器只需调用课程服务上的函数并获取数据

angular.module('resources.curriculum', ['..'])
.factory('Curriculum', function ($http, $q) {
  return {
    create: function(dataToSave) {
      var deferred = $q.defer()

      http.get('...').success(function(data) {
        deferred.resolve(data)
      }).error(function(err) {
        deferred.reject(err)
      })
      return deferred.promise
    }
  }
})
.controller('SomeCtrl', function($scope, Curriculum) {
  $scope.someValue = Curriculum.create($scope.someDataToSave)
})

只需将它们作为参数传递

首先,
$http.post
要求回调接受一个参数。因此,我们编写了
post
期望的函数:

function (curriculumInfo) {
    // .....
}
function (scope,location) {
    return function (curriculumInfo) {
        // ... use scope and location in here
    }
}
但是函数体需要访问
$scope
$location
。因此,我们编写了一个函数,接受这些函数并返回
post
期望的函数:

function (curriculumInfo) {
    // .....
}
function (scope,location) {
    return function (curriculumInfo) {
        // ... use scope and location in here
    }
}
现在我们可以适当地命名函数了。让我们看看,它正在处理对新课程的响应,因此我将其称为
新课程回调
新课程回调
处理新课程回调
,以表明它是回调:

function handle_new_curriculum (scope,location) {
    return function (curriculumInfo) {
    }
}
现在可以调用它将回调函数返回到
post

$http
    .post('bignibou/curriculum/new',$scope.curriculumInfo)
    .success(handle_new_curriculum($scope,$location));

只需将它们作为参数传递

首先,
$http.post
要求回调接受一个参数。因此,我们编写了
post
期望的函数:

function (curriculumInfo) {
    // .....
}
function (scope,location) {
    return function (curriculumInfo) {
        // ... use scope and location in here
    }
}
但是函数体需要访问
$scope
$location
。因此,我们编写了一个函数,接受这些函数并返回
post
期望的函数:

function (curriculumInfo) {
    // .....
}
function (scope,location) {
    return function (curriculumInfo) {
        // ... use scope and location in here
    }
}
现在我们可以适当地命名函数了。让我们看看,它正在处理对新课程的响应,因此我将其称为
新课程回调
新课程回调
处理新课程回调
,以表明它是回调:

function handle_new_curriculum (scope,location) {
    return function (curriculumInfo) {
    }
}
现在可以调用它将回调函数返回到
post

$http
    .post('bignibou/curriculum/new',$scope.curriculumInfo)
    .success(handle_new_curriculum($scope,$location));

嗯。什么意思?其思想不是使请求同步,而是将现在的匿名回调分解成一个命名的callback.Ummm。什么意思?其思想不是使请求同步,而是将现在的匿名回调分解为命名回调。似乎$scope依赖项仅适用于控制器。我需要它为我服务。。。有什么想法吗?在你的控制器中,你调用课程服务,并使用承诺或回调函数处理成功回调。使用回调函数的示例:currency.create($scope.dataToSave,function(dataFromServer){$scope.data=dataFromServer))我不确定我是否在这里跟随你…如果可能,你能提供一个更详细的代码示例吗?似乎$scope依赖项仅适用于控制器。我需要它在我的服务中…有什么想法吗?在你的控制器中,你调用课程服务,并使用承诺或回调函数处理成功回调。例如使用callback函数:currency.create($scope.dataToSave,function(dataFromServer){$scope.data=dataFromServer))我不确定我是否在这里关注您……如果可能,您能否提供更详细的代码示例?