angular的ng-checked运行了两次

2016/12 01 14:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于ca788亚洲城娱乐的点点滴滴

<body style="padding: 10px;" ng-app="app" ng-controller="MyCtrl">
    <input type="checkbox" ng-checked="check">
</body>
<script src="node_modules/angular/angular.min.js"></script>
<script type="text/javascript">
    angular
        .moduleapp, []
        .controllerMyCtrl,function$scope{
            var mm = 1;
            $scope.check = function{
                console.logmm
                mm++;
            }
        }
</script>

如图所示,再阅读器中革新页面的时分,发明check运转了两次,不知道是那边的缘由

angular 是基于脏反省更新视图。每次数据发作变革,至少需求两轮digest。为啥?数据发作变革,第一轮触发watches等;第二轮确保数据没有再发作变革,不然还会触发新一轮digest。

ng-checked会发生一个watch,初始化对表达式check求值,数据发作变革(原先是没有值的)。于是,需求至少再一轮digest。假如check前往mm,每次都有数据变革,那么会触发十轮digest,并且抛出一个错误:Infinite $digest Loop。由于digest默许连续触发最多十次。

官方文档对 ng-checked 对应的描绘是

Sets the checked attribute on the element, if the expression inside ngChecked is truthy.

我理解ng-checked相称于给元素绑定了一个值,而不是像ng-click或许ng-blur如许的指令对应一个DOM事变。ng-checked绑定的表达式的值决议要不要给元素设置checked的属性。以是我对这个题目的理解是:只需angular触发脏值反省,ng-checked对应的办法都市被调用。

革新页面就会实行?我看看控制台
http://www.runoob.com/angular…
ng-checked 指令用于设置复选框checkbox或单选按钮radio的 checked 属性。
假如 ng-checked 属性前往 true,复选框checkbox或单选按钮radio将会中选中。

多谢几位师兄的解答,经过一个实行,发明题目,发明还是和angular的脏循环有关,案比方下:

<body style="padding: 10px;" ng-app="app" ng-controller="MyCtrl">
    <input type="text" ng-model="msg" />
    <input type="checkbox" ng-checked="checkmsg">
    <div ng-click="change">nnnnnn</div>
</body>
<script src="node_modules/angular/angular.min.js"></script>
<script type="text/javascript">

    angular
        .moduleapp, []
        .controllerMyCtrl,function$scope{
            $scope.check = functionmsg{
                ifmsg == 4{
                    console.lognew Date+true
                    return true;
                }else{
                    console.lognew Date+false
                    return false;
                }
            }
            $scope.change = function{
                $scope.msg  = 4;
            }
            $scope.$watchmsg,function{
                console.log$scope.msg;
            }
        }
</script>

ng-checked触发了一次digest循环,会反省check最后前往的值能否有变革,当他发明值变了,就会重新循环反省一次,来确认这个值有没有变革,这个进程中check实行了两次,因此就有2次输入。
好像我例子中的,当我经过点击div,招致改动了$scope中的msg,而msg又是check的紧张参数,这个时分就招致check前往值发作了变革,ng-click也会触发digest循环。这个时分他发明ng-checked的后果,也便是check的后果发作了变革,更新view后,他就又重新实行check反省ng-checked的值能否又变革了,因此,这又是输入了2次。
详细的阅读器输入,需求的师兄们请自行实行

(看完/读完)这篇文章有何感想! 来看看ca788亚洲城娱乐是怎么评论的吧!

--转载请注明: www.ca788.com#亚洲城ca788手机版官网 » angular的ng-checked运行了两次

发表评论

(必填)