2017-04-03 57 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

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

相关问题