2013-12-14 51 views
0

我正在学习AngularJS中的指令,并发现在几个示例中,添加一个隔离范围(@,=或&)。它们有时不仅添加了隔离范围,还添加了后面的ngModel名称。即:“@name”而不是“@”。孤立范围+绑定名称和孤立范围之间的区别仅在AngularJS

所以,有什么区别:

myApp.directive('zippy', function() { 
    return { 
     restrict: "E", 
     transclude: true, 
     replace: true, 
     scope: { 
      name: "@" // <---- 
     }, 
     template: "<div>{{name}}<div ng-transclude></div></div>", 
     link: function(scope, element, attrs) { 
      console.log(scope.name); 
     } 
    } 
}); 

而且这样的:

myApp.directive('zippy', function() { 
    return { 
     restrict: "E", 
     transclude: true, 
     replace: true, 
     scope: { 
      name: "@name" // <---- 
     }, 
     template: "<div>{{name}}<div ng-transclude></div></div>", 
     link: function(scope, element, attrs) { 
      console.log(scope.name); 
     } 
    } 
}); 

回答

3

这是从开发人员指南

对于情况下,属性名相同作为你想要 绑定到指令内的值'范围内,你可以使用这个速记 语法:

... 
scope: { 
    // same as '=customer' 
    customer: '=' 
}, 
... 

意味着你可以在你的指令中使用name: "@"如果你有其中指令声明

<div zippy name="myName"></div> 

记住属性的名称应该同名HTML属性不匹配属性中的表达式。它可以是范围上的任何属性。

+0

Ohhhh我知道了...让我改述一下,如果不是名称,我在范围中获得了“customerName”,那么我应该把范围:{customerName:'@name'},对不对?但由于scope属性与html“name”中的指令完全相同,所以我不需要添加“@name”,我可以直接使用“@”:) – user3078876

相关问题