【问题标题】:angular checkbox update is not updating the model角度复选框更新不更新模型
【发布时间】:2014-10-07 00:46:21
【问题描述】:

我正在尝试根据另一个复选框值更改复选框值,但更改似乎对模型没有任何影响。

这是一个问题的代码示例:

http://plnkr.co/edit/eFOn3cejwKU01LkKNC1s?p=preview

HTML 文件

<!DOCTYPE html>

    <html>

      <head>
        <script data-require="angular.js@*" data-semver="1.2.0-rc3-nonmin" src="http://code.angularjs.org/1.2.0-rc.3/angular.js"></script>
        <link data-require="bootstrap-css@*" data-semver="3.0.0" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />

        <link rel="stylesheet" href="style.css" />
        <script src="script.js"></script>
      </head>

      <body ng-app="main" ng-controller="DemoCtrl">
      <pre>
      A value: {{a}}
      B value: {{b}}
      </pre>
          A <input type="checkbox" ng-model="a" />
          B <input type="checkbox" ng-model="b" 
            ng-disabled="a"
            ng-checked="!a && b"
          />

      </body>

    </html>

还有一个空控制器:

var app = angular.module('main', [])
        .controller('DemoCtrl', function($scope) {

        });

据我所知,Dom 更改不会更改模型,当我尝试调用 $apply 时,摘要已经在运行,所以我有点迷茫。

我不想在第一个复选框上加上 $watch,因为我的例子已经很复杂了。

对于这个问题,有没有不涉及在控制器中编写js代码的替代解决方案?

【问题讨论】:

  • 我不完全清楚你在这里要做什么。您是否尝试根据单击另一个复选框来更改一个复选框?从我的解释来看,如果没有检查另一个,您似乎正在尝试检查一个?你能详细说明一下吗?你不应该为此需要手表。
  • 我要做的是在检查 a 时将 b 模型设置为 false 。所以完整的演示将是检查 b,然后检查 a,b 被禁用且未选中,并且 b 模型仍然为真
  • 谢谢大家的cmets,我真正的问题比这个复杂得多,这只是为了说明它的一个简化。我的最终解决方案是 $watch "a" 元素,这是因为即使 b 未被选中,只要是 dom 修改,即使它已被 angular 指令触发,它也不会是在摘要中处理,因此如果 dom 元素或模型更改没有事件,摘要将不会考虑该更改。
  • 如果您正在寻求帮助,我建议您尝试更清楚地说明这一点。您上面的问题似乎是在询问是否只是更改复选框。

标签: angularjs data-binding checkbox


【解决方案1】:

请看http://plnkr.co/edit/lbOWO4oLbTghactUETTD?p=preview

你错过了对脚本的引用

<script src="//cdn.jsdelivr.net/angular.ngtable/0.3.3/ng-table.js"></script>

【讨论】:

  • Ops,好像我没有保存 plunkr,是我的第一个,对不起
【解决方案2】:

这是一个 plunker,展示了一种在单击 a 并将其设置为 true 时将模型中的 b 值设置为 false 的方法,而无需修改控制器。

http://plnkr.co/edit/rL6tTp5NfBzroZ2zSOgO?p=preview

这是我修改的内容 - 请参阅 ng-change

A <input type="checkbox" ng-model="a" ng-change="b=!a" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多