有没有办法为隔离的范围别名提供默认值?

dnc*_*253 19 javascript angularjs

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

scope: {
    prop1: '@'
}
Run Code Online (Sandbox Code Playgroud)

如果指令没有prop1属性,prop1有没有办法获取默认值?当然,我可以检查它是否被自己定义并设置它,但是当你期望时,属性并不总是被设置.我只是想知道我在文档中是否遗漏了任何语法,或者是否有一个很好的标准方法来执行此操作.谢谢.

小智 19

它取决于您要分配的默认值.如果要在父作用域中默认使用名称,则在指令compile函数中设置默认属性值将起作用:

  compile: function(element, attrs) {
    if (attrs.person == undefined) {
      attrs.$set("person", "person");
    }
  ...

如果你希望指令提供默认值,它会得到一点点转向,因为Angular不会让你分配给隔离范围中的别名(你将从试图传播的观察者那里得到一个"不可指定的模型表达式"异常)对孤立的父范围的分配).但是,您可以通过将属性标记为可选来防止这种情况(这意味着当省略属性时,Angular不会注册侦听器).

  scope: {
    person: "=?"
  },
  link: function(scope, element, attrs) {
    if (scope.person == undefined) {
      scope.person = "Bob";
    }
    ...
  }