AngularJS ng检查未更改模型值

  • 本文关键字:模型 ng AngularJS angularjs
  • 更新时间 :
  • 英文 :


我有一个带有复选框输入的对象表。如果选中对象的复选框,则object.isChecked的值将设置为true,如果未选中,则该值将设置成false。但是,我有一个主复选框,可以选中/取消选中表中的所有复选框。但是,这不会更新object.isChecked值。如何使主复选框更改object.isChecked值?

问题一定是您触发了不在Angular内部的复选框。如果你想让Angular魔术发挥作用,你必须在Angular范围内完成所有的模型操作。我创建了一个plunker来演示

index.html

<!DOCTYPE html>
<html data-ng-app="demo">
  <head>
    <script data-require="jquery@1.9.0" data-semver="1.9.0" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.js"></script>
    <script data-require="angular.js@*" data-semver="1.0.7" src="http://code.angularjs.org/1.0.7/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>
  <body data-ng-controller="DemoController">
    <div data-ng-repeat="object in objects">
      {{object.name}}: <input type="checkbox" data-ng-model="object.isChecked">
    </div>
    Master: <input type="checkbox" data-ng-click="triggerAll()">
    {{objects}}
  </body>
</html>

script.js

"use strict";
var demo = angular.module("demo", []);
function DemoController($scope) {
  $scope.objects = [
    {
      name : "First",
      isChecked : true
    },
    {
      name : "Second",
      isChecked : false
    }
  ]
  $scope.triggerAll = function(){
    angular.forEach($scope.objects, function(value){
      value.isChecked = !value.isChecked;
    })
  }
}

请注意,触发所有复选框是用ngClick完成的,而不是用通常的onClick或jQuery处理程序。这允许Angular运行脏检查并正确运行。

最新更新