更改模型

时间:2015-09-16 11:35:50

标签: javascript angularjs ionic-framework

对于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 ...

3 个答案:

答案 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);
})