Javascript 为什么角度模型在默认情况下阻止选中复选框?

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"> 这是因

我正在为一个网站使用Angularjs,现在我想使用一个复选框。我首先创建了如下复选框:

<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" />