2017-03-02 12 views
0

ローカライゼーションを達成するためにイベントlangChangeをブロードキャストしました。 ここでの問題は、langChangeも解雇されたときに、このコントローラーが接続されているページに入るときにthis.loadContent()と呼ぶエレガントな方法を見つけることです。 それはbind(this)私は私が推測したいことをやりません。角度でのコンテキストバインディング

var $this=this; [...]のようなthisエイリアス解決策は避けます。

app.controller('ctrl', ["$scope","Service", 
    function($scope,Service){ 
     this.loadContent = (function(){ 
       Service 
        .getSection() 
        .then(function (res) { 
         $scope.content = res.data.template; 
        }); 
     }()); 
     $scope.$on('langChange', (function(){ 
      this.loadContent(); 
     }).bind(this)); 
}]); 

EDIT: @Petr Averyanovの回答に基づいて、私は以下のソリューションを試みたが、langChangeが発射されるときloadContentさえ呼ばれていません。

app.controller('ctrl', ["$scope","Service", 
    function($scope,Service){ 
     console.log("loading content..") 
     var _this = this; 
     _this.loadContent = function(){ 
       console.log("load") 
       tutorialService 
        .getSection() 
        .then(function (res) { 
         $scope.content = res.data.template; 
        }); 
     }(); 
     $scope.$on('langChange', _this.loadContent); 
}]); 

私も1を試してみましたが、私は文脈上の問​​題が残っていると思います_this.loadContent is not a functionを取得し、彼のポストにコメントし...

答えて

0

は次のようになります。

app.controller('ctrl', ["$scope","Service", 
    function($scope,Service){ 
     var vm = this; 
     vm.loadContent = function(){ 
       Service 
        .getSection() 
        .then(function (res) { 
         $scope.content = res.data.template; 
        }); 
     }(); 
     $scope.$on('langChange', vm.loadContent); 
     /* or 
      function() { 
      vm.loadContent(); 
      } 
     */ 
}]); 
+0

私は 'this'について知っていますエイリアスソリューション。可能であれば、私はこの解決策を避けるだろう。 – alfredopacino

+0

@alfredopacino解決策について知っていますが、その解決策を使用しないことを選択した場合、この種の混乱を避けるために、「これを解決する別の方法を探しています。回答者や同様の問題を抱えている可能性があるが回避された解決策については知りません。 – Claies

+0

詳細を編集しました – alfredopacino

関連する問題