2017-04-03 12 views
0

私はAngularJSとKendo UIを使用するアプリケーションで作業しています。私は私のコントローラのいずれかで、この1のようなコードを持っている:

var app = angular.module('myApp', []); 
    app.controller('myCtrl', function($scope) { 

     var items = [{ text: "Item 1", value: "1" }, { text: "Item 2", value: "2" }]; 

     $("#dropdownlist").kendoDropDownList({ 
      dataTextField: "text", 
      dataValueField: "value", 
      dataSource: items, 
      index: 0, 
      dataBound: function(e) { 
       $scope.myVariable = this.value(); 
       $scope.$apply(); 
      } 
     }); 
    }); 

あなたが見ることができるように、ドロップダウンリストウィジェットは、ローカルデータにバインドされています。

コードを実行しようとすると、次のエラーが発生します。$ rootScope:inprog。 このエラーは、進行中の$ apply操作が1つしかないためにスローされます。私は$ scopeを呼び出すのではない。$ apply()はコード内のどこにでもあるので、最初の$ apply操作はコントローラの初期化の結果として呼び出されると仮定する。

$ scope($ apply()を削除すると、プログラムは正常に動作しますが、なぜそれほど理解できません。

質問:dataBoundイベントの結果として呼び出される関数が、Angularコンテキストの外にありませんか?

ありがとうございます!

答えて

0

I get the following error: $rootScope:inprog

これは現在の消化サイクルが実行中であり、その間にもう一度再実行する必要がないためです。

代わりの$timeout

$timeout(() => { 
    $scope.myVariable = this.value(); 
}, 0) 
+0

が応答をありがとうあなたが使用できる$scope.$apply

なぜ機能、私は本当に私は$スコープを呼び出すところから、理解していない。$適用()、 Angularコンテキストの内側にあると考えられています。 $ scope($ scope)を削除してもプログラムは動作します。安全上の理由から私はあなたの方法を使うべきですか? – five

+0

角度のない状況では必要ない –

関連する問題