在AngularJS中编写指令时,如何确定是否不需要新的作用域,新的子作用域或新的隔离作用域?我正在寻找一些可以用来帮助确定在编写新指令时使用哪种类型的范围的指南。理想情况下,我想要一个类似于流程图的东西,它会引导我解决一堆问题并弹出正确答案 - 没有新的新范围,新的子范围或新的隔离范围 - 但这可能要求太多。这是我目前微不足道的指导方针:如果使用该指令的元素使用ng-model,请不要使用隔离范围 请参阅我是否可以将ng-model与隔离范围一起使用?而为什么格式化并不孤立的范围内工作?如果指令未修改任何范围/模型属性,请不要创建新范围如果指令封装了一组DOM元素(文档说“复杂的DOM结构”)并且该指令将用作元素,或者在同一元素上没有其他指令,则隔离范围似乎运行良好。我知道在元素上使用带有隔离范围的指令会强制同一元素上的所有其他指令使用相同(一个)隔离范围,因此当使用隔离范围时,这不会严重限制吗?我希望来自Angular-UI团队的一些人(或其他已写过许多指令的人)可以分享他们的经验。请不要添加简单地说“为可重用组件使用隔离范围”的答案。
3 回答
HUH函数
TA贡献1836条经验 获得超4个赞
我的个人政策和经验:
隔离:私人沙箱
我想创建许多范围方法和变量,这些方法和变量仅由我的指令使用,并且从未被用户看到或直接访问过。我想将可用的范围数据列入白名单。我可以使用transclusion允许用户跳回到父范围(不受影响)。我不希望在被抄袭的孩子中可以访问我的变量和方法。
儿童:内容的一个小节
我要创建范围的方法和变量CAN用户访问,但是是不相关的我的指令的情况下外周边范围(兄弟姐妹和父母)。我还想让所有父范围数据透明地渗透。
无:简单的只读指令
我真的不需要搞乱范围方法或变量。我可能正在做一些与范围无关的事情(例如显示简单的jQuery插件,验证等)。
笔记
你不应该让ngModel或其他东西直接影响你的决定。你可以通过像
ng-model=$parent.myVal
(孩子)或ngModel: '='
(孤立)这样的事情来规避奇怪的行为。Isolate + transclude将恢复兄弟指令的所有正常行为并返回到父作用域,因此不要让它影响您的判断。
不要混淆没有的范围,因为它就像将数据放在DOM的下半部分的范围而不是上半部分是有意义的。
注意指令优先级(没有具体的例子说明这会影响事物)
注入服务或使用控制器跨任何范围类型的指令进行通信。您还
require: '^ngModel'
可以查看父元素。
- 3 回答
- 0 关注
- 562 浏览
添加回答
举报
0/150
提交
取消