在angular指令的link函数中设置=和@属性

时间:2014-03-02 10:42:20

标签: angularjs angularjs-directive

可以有人解释我或指向一个文件,它确实解释了以下问题: 我无法在指令的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

谢谢,祝你有愉快的一天!

加布里埃尔

1 个答案:

答案 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