【发布时间】: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