【发布时间】:2015-03-11 14:26:06
【问题描述】:
将数据加载到角度表达式时出现错误。数据已加载,但我收到错误 $digest 已在进行中。
var dom = angular.element($compile(template)($scope));
$scope.$apply();
var html = $('<div>').append(dom).html();
我会在这里给你我的模板的一小部分:
<b>Name: </b>{{model.project.description}}<br />
<b>Littera: </b>{{model.littera}}<br />
<b>Address: </b>{{model.address}}<br />
现在我尝试将 $scope.$apply() 包装到如下的 if 语句中。但我听说这是一个不好的方法。我猜没关系,因为它无论如何都没有用。
if (scope.$$phase) {
scope.$apply();
}
它消除了错误,但现在数据绑定不起作用。现在输出是表达式而不是实际数据。 我也尝试将 $scope.$apply() 放入 $timeout 函数中,但同样,现在我们只得到表达式而不是数据。
此代码在指令中。我只给了你这段代码,因为指令中的其余代码在这里无关紧要。 我需要做些什么才能让数据绑定在仍然使用 $timeout 的情况下工作?
提前致谢。
编辑:我忘了说的一个重要部分是,我相信错误是针对 2 个为空的表达式。在 chrome 调试器中,它们未定义。
【问题讨论】:
-
如果
$compile用于指令的链接阶段,我们不需要scope.$apply()。你有这方面的 plnkr/fiddle 吗? -
$apply接受一个函数作为它的第一个参数。它将运行该函数,然后调用$digest。为您的$compile和append(dom)语句创建一个函数,并将其传递给$apply,然后您的数据应该会填充。 (详情:jimhoskins.com/2012/12/17/angularjs-and-apply.html) -
我正在考虑为此做一个小提琴。但是这个指令对于我们使用它的角度谷歌地图来说是相当复杂的。所以把它拆下来让它在小提琴中工作似乎是一项艰巨的任务。我忘了说代码在承诺中。里面 .then(function(){})
标签: javascript jquery angularjs