2013-12-14 5 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: '=' 
}, 
... 

는이 지시어는

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

이름이해야 속성 기억 선언 된 같은 이름의 HTML 속성이있는 경우 당신이 당신의 지시에 name: "@"을 사용할 수 있다는 것을 의미 속성의 표현식과 일치하지 않습니다. 범위의 모든 속성 일 수 있습니다.

+0

Ohhhh i got it ... 이름 대신 "customerName"이 범위에 있다면 범위를 입력해야합니다. {customerName : '@name'}, 맞습니까? 하지만 scope 속성이 html "name"의 지시문과 정확히 같기 때문에 "@name"을 추가 할 필요가 없습니다. "@"를 직접 사용할 수 있습니다. :) – user3078876

관련 문제