可以有人解释我或指向一个文件,它确实解释了以下问题:
我无法在指令的link
函数中设置'@'映射属性。但是,'='映射属性可以在指令的link
函数中设置为特定值。
可以找到工作示例 here in jsbin
我的意思是以下代码:
directive('myDir', function() {
return {
scope: {
byValue: '@',
byRef: '='},
template: '<span>byValue: {{byValue}}<br>byRef: {{byRef}}</span>',
link: function(scope) {
scope.byValue = 'Custom Value set for byValue'; //this call is ignored!!!
scope.byRef = 'Custom Value set for byRef';
}
};
该指令将呈现:
byValue: myProp byRef: Custom Value set for byRef
谢谢,祝你有愉快的一天!
加布里埃尔
答案 0 :(得分:0)
将对象指定为范围属性会创建一个隔离范围。
@
将本地/指令范围属性绑定到DOM属性的计算值。结果总是一个字符串,因为DOM属性是字符串。这种单向绑定方式与已评估的属性值(非属性)。
=
将本地/指令范围属性绑定到父范围属性。这就像双向约束。
例如假设你写了一个这样的html,
<tag test1="name"></tag>
你有一个范围值
$scope.name = "MyName"
在你做的指令中
scope: {
nameProp: '=test1',
nameAttr: '@test1'
}
你会得到
nameProp = "MyName"
nameAttr = "name"
当你这样做时
scope:
{
byValue: '@',
byRef: '='
}
您可以从指令中访问父作用域byRef
属性,反之亦然。这就是你得到的原因
byRef: Custom Value set for byRef
如果是byValue
,则指令$Scope.byValue
会填充父范围byValue
的属性值,在您的情况下可能myProp
。