2017-04-03 69 views
0

我正在使用AngularJS和Kendo UI的應用程序。我在我的控制器代碼的一個類似於此:

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操作正在進行,因此引發此錯誤。我沒有在我的代碼中的任何其他地方調用$ scope($ apply(),所以我假定由於控制器初始化,第一個$ apply操作被調用。

如果我刪除了$ scope。$ apply(),那麼程序工作正常,但我不明白爲什麼。

我的問題是:該函數不應該被稱爲dataBound事件結果的函數在Angular上下文之外嗎?

在此先感謝!

回答

0

I get the following error: $rootScope:inprog

這是因爲仍然存在當前的消化循環,並且不能強制它再次重新運行。

相反的$scope.$apply

可以使用$timeout

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

謝謝你的迴應,我真的不明白,爲什麼功能,從那裏我調用$範圍。$適用()被認爲是在Angular環境中。即使我刪除了$ scope,程序也能正常工作。$ apply()。出於安全原因,我應該使用您的方法嗎? – five

+0

不需要。如果不是在角度上下文,那麼只有去它 –

相關問題