【问题标题】:Angular JS Controller to view binding not updating on window resizeAngular JS 控制器查看绑定不会在窗口调整大小时更新
【发布时间】:2014-07-26 15:30:20
【问题描述】:

请看小提琴: http://jsfiddle.net/HB7LU/4089/

窗口调整大小上,如果您检查控制台$scope.showName 会按预期在真假之间切换。但是,视图不会更新。它保持初始值为 true。 据我了解,{{}}ng-bind 提供了从控制器到视图的 1 种方式绑定,因此视图中的值应在控制器中更改时更新。

我错过了什么?

【问题讨论】:

    标签: angularjs angularjs-scope


    【解决方案1】:

    $scope 仅绑定到 $digest 周期的视图 - 您的事件不会触发摘要周期,因为没有采取任何措施。您必须致电$scope.$apply() 才能触发视图更新。

    请注意,如果 $digest 循环已在进行中,$scope.$apply() 可能会引发错误。

    【讨论】:

    • 只有在 $scope.$apply() 调用包含在对 $scope.$apply() 的另一个调用中时,才会发生已经在进行的摘要
    • @shaunhusain -- 是的 - 只是让他知道......当你开始在任何地方添加 $scope.$apply() 时,这是一个滑坡,有时会变成一场噩梦
    【解决方案2】:

    您错过了对 $scope.$apply() 的调用,因为该事件是在角度上下文之外处理的,您需要调用 $scope.$apply() 来触发一个摘要,该摘要将更新任何观察者http://jsfiddle.net/HB7LU/4091/

    function MyCtrl($scope, $window) {
        $scope.name = 'Timothy';
        $scope.showName = true
        $scope.nickname = 'Tim'
    
        angular.element($window).bind('resize', function() {
            if ($scope.showName){
                $scope.showName = false;
            }
            else
            {
                $scope.showName = true;
            }
            console.log($scope.showName);
            $scope.$apply();
          });
    }
    

    【讨论】:

      【解决方案3】:

      您需要在 Angular 事件之外的任何范围操作之后添加 $scope.$apply();。将其添加为bind 函数的最后一条语句。

      【讨论】:

        【解决方案4】:
             missing a call to $scope.$apply()
        

        http://jsfiddle.net/HB7LU/4093/

        【讨论】:

        • 我认为这与@shaunhusain 回答相同
        【解决方案5】:

        http://jsfiddle.net/HB7LU/4094/

        $scope.$digest();
        

        试试这个代码.. 我已经添加 $digest of scope alter resize

        【讨论】:

          猜你喜欢
          • 2013-07-13
          • 2019-04-01
          • 2016-07-08
          • 1970-01-01
          • 2018-09-25
          • 1970-01-01
          • 2013-04-22
          • 2013-04-14
          • 2021-01-14
          相关资源
          最近更新 更多