将参数传递给angularjs/javascript中的命名回调函数的问题

bal*_*teo 1 javascript callback angularjs

我想要分解 angularjs $ http成功回调函数,这样我就不会有两个(或N个)匿名回调函数,而是有一个名为callback的函数.

这是两个控制器:

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;
            }           
        });
    };
}
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做,因为将成为命名的回调函数有几个依赖(即$ scope和$ location).

如果我从angularjs控制器中提取函数(命名回调),则命名回调不再访问其依赖项.

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

sle*_*man 7

只需将它们作为参数传递.

首先,$http.post期望回调接受一个参数.所以我们编写了post期望的函数:

function (curriculumInfo) {
    // .....
}
Run Code Online (Sandbox Code Playgroud)

但是函数的主体需要访问$scope$location.所以我们编写一个接受它们的函数并返回post期望的函数:

function (scope,location) {
    return function (curriculumInfo) {
        // ... use scope and location in here
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以恰当地命名该函数.让我们看看,它的处理,以新课程的反应,所以我想无论是把它new_curriculum_callbacknew_curriculum_callbackhandle_new_curriculum以表明它是一个回调函数:

function handle_new_curriculum (scope,location) {
    return function (curriculumInfo) {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以调用它来将回调函数返回到post:

$http
    .post('bignibou/curriculum/new',$scope.curriculumInfo)
    .success(handle_new_curriculum($scope,$location));
Run Code Online (Sandbox Code Playgroud)