说我的directive定义中包含以下内容:
scope: {
prop1: '@'
}
如果指令没有prop1属性,prop1有没有办法获取默认值?当然,我可以检查它是否自己定义并设置它,但是the property isn't always set when you would expect。我只是想知道文档中是否遗漏了任何语法,或者是否有一个很好的标准方法。感谢。
答案 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'] || '@'