对于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 ...
答案 0 :(得分:3)
替换:
<div ng-hide="{{beHidden}}"></div>
使用:
<div ng-hide="beHidden"></div>
此外,无需在beHidden
来电中包含$timeout
的更新。
答案 1 :(得分:2)
我遇到了类似的问题(使用完全相同的用例),这是由{{ }}
括号引起的。人们不应该使用这些大括号。
答案 2 :(得分:0)
我认为是范围问题。 我不确定你的情况范围是否相同。 作为解决方案,您可以尝试一下。
尝试:
<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);
})