在dataBound事件中调用$ scope。$ apply()

时间:2017-04-03 18:20:17

标签: javascript angularjs kendo-ui

我正在开发一个使用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上下文之外吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

  

我收到以下错误:$ rootScope:inprog

这是因为当前仍有消化循环在运行,你不能强迫它再次重新运行。

而不是$scope.$apply

您可以使用$timeout

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