假设我将以下内容作为指令定义的一部分:
scope: {
prop1: '@'
}
如果指令没有 prop1 属性,有没有办法让 prop1 获得默认值?当然,我可以检查它是否是我自己定义的并设置它,但属性并不总是在你期望的时候设置。我只是想知道我在文档中是否遗漏了任何语法,或者是否有一种很好的标准方法来做到这一点。谢谢。
假设我将以下内容作为指令定义的一部分:
scope: {
prop1: '@'
}
如果指令没有 prop1 属性,有没有办法让 prop1 获得默认值?当然,我可以检查它是否是我自己定义的并设置它,但属性并不总是在你期望的时候设置。我只是想知道我在文档中是否遗漏了任何语法,或者是否有一种很好的标准方法来做到这一点。谢谢。
这取决于您要分配的默认值。如果您想默认为父范围内的名称,则在指令的compile
函数中设置默认属性值将起作用:
编译:函数(元素,属性){ 如果(attrs.person == 未定义){ attrs.$set("person", "person"); } ...
如果您希望指令提供默认值,它会变得有点棘手,因为 Angular 不会让您分配给隔离范围内的别名(您将从试图传播的观察者那里获得“不可分配的模型表达式”异常分配给隔离的父范围)。但是,您可以通过将属性标记为可选来防止这种情况发生(这意味着当属性被省略时,Angular 不会注册侦听器)。
范围: { 人:“=?” }, 链接:功能(范围,元素,属性){ if (scope.person == undefined) { scope.person = "鲍勃"; } ... }
scope['prop1'] = scope['prop1'] || '@'