Javascript 为什么角度模型在默认情况下阻止选中复选框?
我正在为一个网站使用Angularjs,现在我想使用一个复选框。我首先创建了如下复选框:Javascript 为什么角度模型在默认情况下阻止选中复选框?,javascript,html,angularjs,checkbox,Javascript,Html,Angularjs,Checkbox,我正在为一个网站使用Angularjs,现在我想使用一个复选框。我首先创建了如下复选框: <input type="checkbox" checked> 复选框仍会显示,但突然间选中的不再有效;默认情况下,该复选框始终处于未选中状态 为什么?为什么模型会阻止选中的产生任何影响?欢迎所有提示 改用ng checked如下: <input type="checkbox" ng-model="settings.mySwitch" ng-checked="true"> 这是因
<input type="checkbox" checked>
复选框仍会显示,但突然间选中的不再有效;默认情况下,该复选框始终处于未选中状态
为什么?为什么模型会阻止选中的
产生任何影响?欢迎所有提示 改用ng checked
如下:
<input type="checkbox" ng-model="settings.mySwitch" ng-checked="true">
这是因为当渲染元素时,浏览器会设置已选中的属性,但随后会在复选框(其值为falsy)上处理ng模型,并取消选中该属性。相反,如果执行ng checked=“true”
操作,它将起作用(因为ng checked
指令在处理ng模型后设置属性,因为它的优先级低于ng model
)。但是您的模型的初始状态将变得混乱(如果使用1.3.x+),因为ng checked
不会更新ng模型的状态。因此,只需将ng model
值设置为true即可
仅用于演示,我使用的是ng init
(您应该在控制器中设置ng模型初始值)
请参见演示和比较:-
已选中ng{{settings.mySwitch}
使用正确的初始化{settings.mySwitch1}
这是因为设置的初始值。mySwitch
。如果希望默认选中复选框,则应将初始值设置为true
,而不是添加checked
属性,因为当angular处理模板时,它将获得其值并相应地呈现选中的属性。不应将它们混合在一起,这将扰乱ng模型的初始状态。请看我答案中的演示,这确实有效。谢谢。不幸的是,我还将引导开关()与angualr指令一起使用(),当我现在向输入添加bs switch
时,ng checked=“true”
再次无效。还有什么办法解决这个问题吗?@H_C因为…,更好的做法是设置ng模型,而不是选中ng。@PSL你是对的。谢谢:)H_C,你应该为此使用ng init
。@Zee你更新了你的答案并使我的无效;)!!然而,ng init也不是一个好的实践,因为它不是为此而设计的(我在括号中提到了它)。阅读中的第一个红色块,尽管它仍然可以更好地在控制器中实例化。
<input type="checkbox" ng-model="settings.mySwitch" ng-checked="true">
<input type="checkbox" ng-init="settings.mySwitch=true" ng-model="settings.mySwitch" />
<input type="checkbox" ng-init="settings.mySwitch=true" ng-model="settings.mySwitch" />