나는 한 가지 질문에 어려움을 겪고 있으며 왜 그런 일이 일어나는지 알 수 없다.Angularjs의 지시문은 어떻게 작동합니까?
모듈 (portfolioModule), 서비스 (Menu) 및 지시문 (niMenu)이 있습니다. 지시문은 하위 항목이있는 메뉴 항목을 렌더링해야합니다.
HTML :
<div ng-app="portfolioModule">
<script id="menuItem" type="text/ng-template">
<li>
<a>{{item.name}}</a>
<ul>
<li ng-repeat="item in menu.getKids(item.id)" ng-include="'menuItem'"></li>
</ul>
</li>
</script>
<div>
<div ni-menu="test">test1</div>
</div>
</div>
자바 스크립트 :
var portfolioModule = angular.module('portfolioModule', []);
portfolioModule.factory('Menu', function() {
var items = [
{
"parent_id": null,
"id": 1,
"name": "foo"
}, {
"parent_id": 1,
"id": 2,
"name": "foo-bar"
}
];
this.getKids = function(parent_id) {
var result = [];
parent_id = parent_id || null;
console.log('getKids', parent_id);
angular.forEach(items, function(value) {
if (value.parent_id === parent_id) {
result.push(value);
}
});
return result;
};
return this;
}
);
portfolioModule.directive('niMenu', function(Menu) {
var niMenu;
return niMenu = {
template: '<ul ng-include="\'menuItem\'" ng-repeat="item in menu.getKids()"></ul>',
restirt: 'A',
link: function(scope, element, attrs) {
console.log('link');
scope.menu = Menu;
}
};
}
);
근무 데모 : http://jsfiddle.net/VanSanblch/Ng7ef.
html에서는 ni-menu를 ni-menu로 호출합니다. 지시어는 Menu-service를 모듈의 범위에 넣는 템플릿과 링크 함수를 가지고있다. 지시문의 템플릿에서 Menu.getKids()를 사용하고 모든 최상위 항목을 가져옵니다. 나중에 ng-include가 사용하는 템플릿에서 Menu.getKids (item.id)를 호출하고 특정 항목의 모든 하위 항목을 가져옵니다.
작은 세부 사항 하나만 제외하면 모든 것이 훌륭하게 작동합니다. 콘솔을 열면 예상보다 많은 getKids 호출이 있음을 알 수 있습니다. 예를 들어, 두 요소의 배열의 경우 getKids 호출 수가 9입니다.
누군가 지구상에서 왜 그런지 설명 할 수 있습니까?
죄송합니다 - 피들 링크를 끊었습니다. :-) –
@JoshDavidMiller가 수정되었습니다. –