我的路线如下:
/items/item/123/edit
和控制器(一个控制器用于查看和编辑):
...
if ($routeParams.id) {
$scope.itemId = $routeParams.id;
$scope.editMode = true;
Item.getBoxes({id: $routeParams.id}).$promise.then(function (data) {
$scope.data.boxId = [];
angular.forEach(data, function (obj) {
$scope.data.boxId.push(obj.id);
$scope.boxCache[obj.id] = {id: obj.id, name: {id: obj.id, name: obj.name}};
});
$scope.items= data;
});
}
...
8个案例中的7个工作正常,但有时并未将数据绑定到视图。
我无法与$scope.$apply()
或$scope.$digest()
合并,因为他们正在进行中
答案 0 :(得分:2)
你可以使用$ scope。$仅在它们不在进行时才适用。
您可以通过检查$ scope。$$阶段来检查$ digest是否已在进行中。
if(!$scope.$$phase) {
//$digest or $apply
}
使用安全申请,例如:
$rootScope.$$phase || $rootScope.$apply();
或其他方法使用此服务。
$timeout(function(),millisecond);
你也可以使用 - $evalAsync
$ evalAsync([表达式],[本地人]);
看看这个 - > https://docs.angularjs.org/api/ng/type/$rootScope.Scope
在$evalAsync
和$timeout
之间选择取决于您的情况:
$evalAsync
排队,则应该运行
在DOM被Angular操纵之后,但在浏览器之前
渲染。$evalAsync
排队,则应该运行
在DOM被Angular操纵之前(和之前)
浏览器渲染) - 很少你想要这个$timeout
排队,它应该在Angular操纵DOM之后运行,并在浏览器渲染之后运行(在某些情况下可能会导致闪烁)