1

angularjsの$http 成功コールバック関数を除外して、 2 つ (または N 個)の匿名コールバック関数を使用する代わりに、 callback functionという名前の 1 つのコールバック関数を使用したいと考えています。

2 つのコントローラーは次のとおりです。

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 コントローラーから抽出すると、名前付きコールバックはその依存関係にアクセスできなくなります

成功のコールバック関数を除外し、依存関係が満たされていることを確認するのを手伝ってくれる人はいますか?

4

3 に答える 3

7

それらを引数として渡すだけです。

まず、$http.postコールバックが 1 つの引数を受け入れることを期待します。したがって、次のことをpost期待する関数を書きます。

function (curriculumInfo) {
    // .....
}

ただし、関数の本体には$scopeおよびへのアクセスが必要です$locationpostしたがって、それらを受け入れ、期待する関数を返す関数を作成します。

function (scope,location) {
    return function (curriculumInfo) {
        // ... use scope and location in here
    }
}

これで、関数に適切な名前を付けることができます。新しいカリキュラムへの応答を処理しているので、コールバックであることを示すためにnew_curriculum_callbackornew_curriculum_callbackまたはと呼びます。handle_new_curriculum

function handle_new_curriculum (scope,location) {
    return function (curriculumInfo) {
    }
}

これを呼び出して、コールバック関数をpost次の場所に返すことができます。

$http
    .post('bignibou/curriculum/new',$scope.curriculumInfo)
    .success(handle_new_curriculum($scope,$location));
于 2013-10-30T02:20:42.817 に答える
0

You would probably want to create angularjs service and call particular request on click of some button. This way you call requests in a synchronous way.

于 2013-10-29T17:23:02.930 に答える