2016-04-27 7 views
-3

なぜ私のコントローラに注入された依存関係(または他の変数が宣言されている)が遅延プロミスの '当時'関数の成功/エラーコールバックで利用できないのかを理解しようとしています。角度の約束の「当たった」関数の成功コールバックの語彙的な範囲は何ですか?

ここでは、$ qのマニュアルといくつかの記事を検索しましたが、私の質問に答えることができません...正しいキーワードを検索していない可能性があります。

私の知りたい質問があるコントローラのスニペットです。 ありがとうございます!

(function() { 
'use strict'; 
angular 
    .module('app.aModule') 
    .controller('mycontroller', MyController); 

MyController.$inject = ['$controller', '$scope', 'myService']; 

function MyController($controller, $scope, myService) { 

    $scope.myProp; 
    var myVariable1 = 'hello'; 

    //.............some code................. 

    $scope.save = function(event) { 
      var myVariable2 = 'World!'; 
      myService.post($scope.myProp).then(
       function (result) { 
        // 1. can I access to myVariable1 here? 
        // 2. can I access to myVariable2 here? 
        // 3. can I access to $scope or $controller dependency here? 
        // 4. can I access to myService dependency here? 
       }, 
       function (error) { 
        // do something 
       } 
      ); 
     }; 

    //.............some code................. 
} 

})(); 

そして、ここで私の角度サービスのPOSTメソッドである:

function post(data) { 
     var deferred; 
     deferred = $q.defer(); 

     $http.post(apiUrl + endpoint + 'post', data).then(function (result) { 
      deferred.resolve(result); 
     }, function (error) { 
      deferred.reject(error); 
     }); 

     return deferred.promise; 
    }; 
+0

ただデバッグしてください。それは簡単です – Mediator

+0

@メディエイターHehe私はすでにそれをやったが、私はその背後にある理論を理解したいと思います。ところで、私は$ scopeとmyServiceの依存関係($ controllerと他の変数ではない)にしかアクセスできないデバッグ時に。 – DiegoA29

+0

1-3回答はyesです.4番目のポイントで何を参照しているのかわかりません。 '$ http.post'はすでに約束を返し、' deferred.promise'でそれをラップしません。 – mido

答えて

0

それは約束に依存していません。 クロージャ機能を理解できません。

クロージャは、親関数が閉じられた後でも、親スコープにアクセスする関数です(角度範囲ではありません)。 myVariable1または(と)myVariable2を機能させると、このvaribalesを見ることができますが、デバッグすれば見ることはできません。

回答: 1と2はあなたのやり方によって異なります。 3. $ scope - はい。コントローラ - 意味が分からない。 4. 1と2と同じ答え。

+0

私はクロージャが何であるか知っています。私はコードを書き込んでデバッグしたので、デバッグの結果は前の役に立たないコメントに答えたものです。 「あなたのやる気にかかっていますか?これは少し一般的です。 $コントローラサービスはコントローラをインスタンス化する責任がありますが、この種のことを理解できない場合は、角度に関する詳細を読むべきです。 – DiegoA29

+0

変数を関数に変換する方法について説明したことは意味がありません。 「親スコープ」が何を意味するのか理解していれば、機能や変数ではないことを知ることができます。 – DiegoA29

+0

私はjsfiddleを作成することをお勧めします。あなたはmyVariable1とmyVariable2を見る必要があるからです。私が「あなたのやり方に依存する」と言ったとき、あなたは約束の中でmyVariable1を書く必要があります。あなたが書いていないのであれば、それをデバッグで見ることはできません。 – Mediator

関連する問題