我正在开发一个使用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();
}
});
});
如您所见,dropdownlist小部件绑定到本地数据。
如果我尝试运行代码,则会收到以下错误: $ rootScope:inprog 。 抛出此错误,因为只有一个$ apply操作正在进行中。我不是在我的代码中的其他地方调用$ scope。$ apply(),所以我假设第一个$ apply操作由于控制器初始化而被调用。
如果我删除$ scope。$ apply()那么程序正常工作,但我真的不明白为什么。
我的问题是:作为dataBound事件的结果调用的函数不应该在Angular上下文之外吗?
提前致谢!
答案 0 :(得分:0)
我收到以下错误:$ rootScope:inprog
这是因为当前仍有消化循环在运行,你不能强迫它再次重新运行。
而不是$scope.$apply
,
您可以使用$timeout
$timeout(() => {
$scope.myVariable = this.value();
}, 0)