我在研究如何在Angular中创建“漂亮”的复选框和单选框。我已经使用jQuery开发了类似的插件,但是在Angular版本中遇到了问题,特别是对于复选框部分。
我创建了一个指令(prettyCheckbox),其模板是一个包装复选框输入的div:
我创建了一个指令(prettyCheckbox),其模板是一个包装复选框输入的div:
<div class="prettyCheckbox" ng-click="toggleCB($event)" ng-class="{ 'checked': checkbox }">
<input id="{{inputID}}" type="checkbox" ng-model="checkbox">
</div>
如您所见,模型值被检查后,将div类更改为checked。当它不是时,它就不是。输入被赋予display: none;
,看起来一切都很好。当我设计它时,我设置它与带有for属性的标签一起工作,一切都还好。
然后我想起来,您还可以使用标签包装输入,点击该标签应触发输入。我在其上测试了我的代码,它变得非常错误。我看到了范围监视和控制台日志,我已经设置好了,以查看每个单击div-checkbox时触发3次变量,并且在单击标签时触发两次,而其中每次都不会实际更改值。这毫无意义。我一直在调整它一段时间了,但我不知道真正的问题是什么,也不知道如何解决它。我希望我能得到一些建议。我已经创建了一个包含代码的plunker:http://plnkr.co/edit/OVzSUhqnLDpvtuiRh2sM?p=preview。请注意,plunker确实会产生许多控制台日志。
最令人恼火的不一致性之一是当我看到变量更改但ng-class不会触发并相应更改(单击标签时)。
编辑:通过apply使框改变,但多次点击仍然没有运气。
编辑2:我尝试修改它以获得有关双击的更多答案,最终进行了微调,并将其清理干净。我有点明白为什么在第二种情况下(包装标签)单击复选框会导致单击3次:单击它也单击了包装标签,但这仍然只有2次单击。我不知道第三个来自哪里,但我的解决方案似乎有效。这是一个新的plunkr:http://plnkr.co/edit/vvIDSHshvsq1akvFpdUc?p=preview