개체 배열을 사용하는 지시문이 있습니다. 마크 업에서 지시어를 선언 할 때, 스코프에는 지시어에 필요한 지시어를 감싸는 오브젝트 배열이 있습니다. 그래서 배열에 map 함수를 적용해야합니다. 원본 배열에 대한 업데이트가 지시문에 반영되도록하려면 어떻게해야할까요? 내가 그들을 바인딩 할 때 다르게 표현 좀 치료를 할 필요가 생각 http://plnkr.co/edit/GUCZ3c배열의 매핑에 AngularJS 지시문을 바인딩합니다.
답변
그 중에서도 함수가 매우 가벼운 작업 (예 : 빠른 계산)을 수행하지 않는 한 함수를 호출하지 마십시오. 이 question에 대한 자세한 내용이 있습니다.
귀하의 경우 이름 목록을 캐시하고 지시문에 바인딩해야합니다. 예를 들면 다음과 같습니다.
app.controller('MainCtrl', function($scope) {
$scope.people = [
{ name: 'Alice'},
{ name: 'Bob' },
{ name: 'Chuck' }
];
$scope.addName = function(name) {
$scope.people.push({name: name});
};
$scope.$watch(function() { return $scope.people.length; }, function() {
$scope.names = $scope.people.map(function(p) { return p.name; });
});
});
지시어 코드는 동일하게 유지됩니다. 플 렁커의 fork입니다.
업데이트 : $watch
을 사용하여 @KrisBraun 조언에 따라 자동으로 이름 목록을 업데이트하도록 코드를 변경했습니다.
:
여기에 (내가 $의 많은 오류를 소화을 제외하고 대부분은 '직장'을보고 깜짝 놀랐다) 순진한 접근 방식과 Plunker있어 격리 된 범위. Here is a forked plunker.
app.directive('myDirective', function($compile) {
return {
restrict: 'E',
scope: {
names: '&namesFunc'
},
template: '<div><p>JSON: {{names() | json}}</p><p>Names:</p><ul><li ng-repeat="name in names()">{{name}}</li></ul></div>',
replace: true,
link: function(scope, elem, attr, ctrl) {
}
};
});
아, 그걸 시도 했어야했는데. 어떤 이유로 나는 바인딩이 자동으로 업데이트되지 않는다고 생각했지만 분명히 그렇다. –
두 바인딩 방법간에 효율성 차이가 있다면 어떤 생각이 드나요? –
'&'바인딩은 업데이트되지 않습니다. 부모 범위의 컨텍스트에서 표현식을 실행하는 방법을 제공합니다. 이 경우 지시어는 부모 범위에 정의 된'getName()'을 호출한다. –
- 1. Angular.js - 컨트롤러의 변수에 지시문을 바인딩합니다.
- 2. AngularJS - DOM에 추가하고 이벤트를 바인딩합니다.
- 3. angularjs 지시문을 무시하는 방법
- 4. AngularJS 지시문을 추가하고 컴파일하십시오.
- 5. AngularJS 지시문을 요소에 바인딩
- 6. AngularJS 지시문을 테스트하는 방법
- 7. angularjs 지시문을 동적으로 추가합니다.
- 8. 동일한보기에서 동일한 지시문을 사용하고 다른 데이터를 바인딩합니다.
- 9. Angularjs, $ http.post로 고객 지시문을 만듭니다
- 10. AngularJS 지시문을 선호하는 이유는 무엇입니까?
- 11. 어떻게 AngularJS 지시문을 조건부로 배치합니까?
- 12. AngularJS - 요소에서 동적으로 지시문을 제거합니다.
- 13. 서비스에서 지시문을 호출하십시오. angularjs + typescript
- 14. reactJS의 AngularJS 지시문을 사용하는 방법
- 15. Angularjs 지시문을 사용하여 요소 정렬
- 16. angularJS 지시문을 올바르게 작성하는 방법
- 17. AngularJS 지시문을 사용하는 Cycle2 슬라이더
- 18. Angularjs 지시문을 사용하여 내 테이블에 copy-paste 지시문을 구현합니다.
- 19. 하나의 AngularJS 지시문을 클릭시 DOM에 다른 지시문을 추가합니다.
- 20. 스크롤 위치를 사용하는 AngularJS 지시문을 유닛 테스트합니다.
- 21. AngularJS - 지시문을 통해 버튼에 onClick 이벤트 추가
- 22. AngularJS JCrop 지시문을 수정하는 방법은 무엇입니까?
- 23. 템플릿을 변경할 때 AngularJS 지시문을 언로드하는 방법
- 24. AngularJS jQueryUI 자동 완성 지시문을 만드는 방법
- 25. Angularjs 프로젝트에 통합 타사 지시문을 배포하는 방법
- 26. svg에서 AngularJS 지시문을 사용하면 결과가 표시되지 않습니다.
- 27. Angularjs : 컨트롤러 및 지시문을 사용하는 올바른 방법입니까?
- 28. requirejs 모듈에서 angularjs 지시문을 정의하는 방법은 무엇입니까?
- 29. AngularJS : 다중 지시문을 변환하는 방법은 무엇입니까?
- 30. AngularJS 라디오 입력 지시문을 올바르게 빌드하려면 어떻게합니까?
캐싱에 대한 좋은 지적. 기본 배열에서 $ watch를 사용하여 캐쉬를 업데이트하면 클리너도 변경되고 변경 사항을 처리 할 수있다. 그 컨트롤러 밖에서. –
캐시를 자동으로 업데이트하기 위해'$ watch '를 사용하는 것이 옳다. 내가 사용할 포스트를 업데이트 할 것이다. –
$ scope.people.length를 $ watch.info로 사용하면 좋은 생각이다. 공간과 sp 전체 배열보다 효율적입니다. 다른 코드가 동일한 길이의 다른 목록을 생성하는 요소를 추가 및 제거 할 수는 있지만 현재 문제가되지 않는 코드를 알고 있다는 위험이 있습니다. –