当改变模型时,AngularJS视图不更新
AngularJS view not updating when changing model
这是Angular中一个非常臭名昭著的问题,网上有很多文章都在解释这个问题,但请听我把话说完。我读过这些,但都不起作用。我有以下内容(这里我只是简化一下):
视图:
<div ng-hide="{{beHidden}}"></div>
控制器:
// Set beHidden to initially be false (This works and reflects when set to true as well)
$scope.beHidden = false;
// First we display a popup asking the user to choose whether the div should be hidden
var confirmPopup = $ionicPopup.confirm({
title: 'Hidden Div',
template: 'Do you want to hide the div?',
cancelText: 'No',
okText: 'Yes'
}).then(function(res) {
if(res) {
// User chose to hide div
$timeout(function() {
$scope.beHidden = true;
});
} else {
// User chose NOT to hide div
$timeout(function() {
$scope.beHidden = false;
});
}
});
现在不起作用了。我读到我应该使用$scope.$apply
方法,但是当我这样做的时候,我得到了$digest already in progress
错误。他们说,你应该使用$timeout(function() { // do stuff });
,而这不会抛出任何错误,视图根本不会更新,以隐藏div,当这是用户选择…什么好主意吗?
另外,是的,我正确地将$timeout注入控制器…
Replace:
<div ng-hide="{{beHidden}}"></div>
:
<div ng-hide="beHidden"></div>
也不需要在$timeout
调用中封装beHidden
的更新
我有一个类似的问题(完全相同的用例),这是由于{{ }}
括号引起的。不要在视图中使用大括号
我认为这是一个范围问题。我不确定你的情况是否相同。作为一种解决办法,你可以试一试。
试题:
<div ng-hide="{{$root.beHidden}}"></div>
在控制器:
.run(function($rootScope) {
$rootScope.beHidden = false;
})
.controller('yourCtrl', function($scope, $rootScope) {
// for some Condition
$rootScope.beHidden = true;
$timeout(function(){
$rootScope.apply()
}, 100);
})
相关文章:
- 在Rails中更新Div,而不更改更新请求后的视图
- 如何在视图模型contet更新更新上调用Jquery函数
- 在控制器之间切换,可以't更新视图
- 拖动&删除Fullcalendar.io资源-更新视图
- 从 AngularJS 中的 ngview 内部的视图更新主页
- angularJS视图更新后初始化引导工具提示
- 定期轮询数据库,Rails 视图更新而不刷新
- 如何在 AngularJs 中的数据库发生变化时立即实现自动视图更新
- 如何从 AngularJS 视图更新变量
- ngModel 不会在第一次触发视图更新
- 木偶骨干复合视图 更新有关集合更改的模型数据
- AngularJS:视图更新正确,但模型没有更新
- AngularJS:在视图更新时运行函数
- Angular.js:模型更新不会触发视图更新
- 使用ngshow改进AngularJS视图更新
- 在Flask视图更新时显示数据流
- 如何检测浏览器何时完成了视图更新(重新布局,应用任何更改的CSS)
- Marionette中视图更新的延迟对象VS主干事件
- BackboneJS视图更新
- 从控制器更改视图不会触发视图更新