이 질문은 이미 치러졌지만 AngularJS 스코프 인 끔찍한 혼란으로 어려움을 겪고있는 누군가를 위해 이것을 공유 할 것입니다. 이 의지 커버 =
, <
, @
, &
와 ::
. 전체 기록은 여기 에서 찾을 수 있습니다 .
=
양방향 바인딩을 설정합니다. 부모의 재산을 변경하면 자녀가 변경되고 그 반대도 마찬가지입니다.
<
편도 바인딩, 부모와 자식을 설정합니다. 부모의 속성을 변경하면 자식이 변경되지만 자식 속성을 변경해도 부모 속성에 영향을 미치지 않습니다.
@
하위 속성에 태그 속성의 문자열 값을 할당합니다. 속성에 expression이 포함되어 있으면 표현식 이 다른 문자열로 평가 될 때마다 자식 속성이 업데이트됩니다. 예를 들면 다음과 같습니다.
<child-component description="The movie title is {{$ctrl.movie.title}}" />
bindings: {
description: '@',
}
여기서 description
자식 범위 의 속성은 expression의 현재 값이되며 "The movie title is {{$ctrl.movie.title}}"
여기서 movie
부모 범위의 개체입니다.
&
약간 까다 롭고 실제로 그것을 사용해야 할 강력한 이유가없는 것 같습니다. 하위 범위의 변수로 매개 변수를 대체하여 상위 범위의 표현식을 평가할 수 있습니다. 예 ( plunk ) :
<child-component
foo = "myVar + $ctrl.parentVar + myOtherVar"
</child-component>
angular.module('heroApp').component('childComponent', {
template: "<div>{{ $ctrl.parentFoo({myVar:5, myOtherVar:'xyz'}) }}</div>",
bindings: {
parentFoo: '&foo'
}
});
주어진 parentVar=10
경우 표현식 parentFoo({myVar:5, myOtherVar:'xyz'})
은 다음 5 + 10 + 'xyz'
과 같이 평가되고 컴포넌트는 다음과 같이 렌더링됩니다.
<div>15xyz</div>
이 복잡한 기능을 언제 사용하고 싶습니까? &
사람들이 종종 부모 범위의 콜백 함수를 자식 범위로 전달하기 위해 사용합니다. 그러나 실제로는 함수를 전달하기 위해 '<'를 사용하여 동일한 효과를 얻을 수 있습니다.이 방법은 더 간단하고 매개 변수를 전달하기 위해 어색한 중괄호 구문을 피합니다 ( {myVar:5, myOtherVar:'xyz'}
). 치다:
다음을 사용하는 콜백 &
:
<child-component parent-foo="$ctrl.foo(bar)"/>
angular.module('heroApp').component('childComponent', {
template: '<button ng-click="$ctrl.parentFoo({bar:'xyz'})">Call foo in parent</button>',
bindings: {
parentFoo: '&'
}
});
다음을 사용하는 콜백 <
:
<child-component parent-foo="$ctrl.foo"/>
angular.module('heroApp').component('childComponent', {
template: '<button ng-click="$ctrl.parentFoo('xyz')">Call foo in parent</button>',
bindings: {
parentFoo: '<'
}
});
개체 (및 배열)는 복사되지 않고 자식 범위를 참조하여 전달됩니다. 이것이 의미하는 것은 단방향 바인딩 인 경우에도 부모 및 자식 범위에서 동일한 개체로 작업하고 있다는 것입니다.
작동하는 다른 접두사를 보려면이 plunk를 엽니 다 .
일회성 바인딩 (초기화)
::
[공식 문서]
이후 버전의 AngularJS에는 한 번만 바인딩하는 옵션이 도입되어 자식 범위 속성이 한 번만 업데이트됩니다. 부모 속성을 볼 필요가 없어 성능이 향상됩니다. 구문은 위와 다릅니다. 일회용 바인딩을 선언 ::
하려면 component 태그 의 표현식 앞에 추가하십시오 .
<child-component
tagline = "::$ctrl.tagline">
</child-component>
이는 tagline
단방향 또는 양방향 바인딩을 설정하지 않고 하위 범위에 값을 전파합니다 . 참고 : tagline
처음 undefined
에 부모 범위에있는 경우 angular는 변경 될 때까지 그것을보고 자식 범위에서 해당 속성을 한 번 업데이트합니다.
요약
아래 표는 속성이 객체, 배열, 문자열 등인지에 따라 접두사가 작동하는 방식을 보여줍니다