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

时间:2012-09-28 19:44:35

标签: javascript angularjs

说我的directive定义中包含以下内容:

scope: {
    prop1: '@'
}

如果指令没有prop1属性,prop1有没有办法获取默认值?当然,我可以检查它是否自己定义并设置它,但是the property isn't always set when you would expect。我只是想知道文档中是否遗漏了任何语法,或者是否有一个很好的标准方法。感谢。

2 个答案:

答案 0 :(得分: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";
    }
    ...
  }

答案 1 :(得分:-3)

scope['prop1'] = scope['prop1'] || '@'