19

假设我将以下内容作为指令定义的一部分:

scope: {
    prop1: '@'
}

如果指令没有 prop1 属性,有没有办法让 prop1 获得默认值?当然,我可以检查它是否是我自己定义的并设置它,但属性并不总是在你期望的时候设置。我只是想知道我在文档中是否遗漏了任何语法,或者是否有一种很好的标准方法来做到这一点。谢谢。

4

2 回答 2

19

这取决于您要分配的默认值。如果您想默认为父范围内的名称,则在指令的compile函数中设置默认属性值将起作用:

  编译:函数(元素,属性){
    如果(attrs.person == 未定义){
      attrs.$set("person", "person");
    }
  ...

如果您希望指令提供默认值,它会变得有点棘手,因为 Angular 不会让您分配给隔离范围内的别名(您将从试图传播的观察者那里获得“不可分配的模型表达式”异常分配给隔离的父范围)。但是,您可以通过将属性标记为可选来防止这种情况发生(这意味着当属性被省略时,Angular 不会注册侦听器)。

  范围: {
    人:“=?”
  },
  链接:功能(范围,元素,属性){
    if (scope.person == undefined) {
      scope.person = "鲍勃";
    }
    ...
  }
于 2013-08-04T17:12:38.180 回答
-3
scope['prop1'] = scope['prop1'] || '@'
于 2012-09-28T20:10:54.143 回答