AngularJS: много раз использовать ng-include
У меня есть старый проект. В данный момент я не могу переписать все, чтобы использовать ng-view
и маршруты. Так что у меня большой html
файл и много нечитаемого кода.
<div ng-if="f1">
<div>...</div>
</div>
<div ng-if="f2">
<div>...</div>
</div>
<div ng-if="f3">
<div>...</div>
</div> ....etc
Я хотел бы разбить этот код на блоки и использовать ng-include
убрать код. Но тогда у меня будет много этого тега (> 10). Это нормально? Есть ли способ реорганизовать файл по-другому?
<div ng-if="f1" ng-include="url1"> </div>
<div ng-if="f2" ng-include="url2"> </div>
<div ng-if="f3" ng-include="url2"> </div>
3 ответа
Вы должны поместить свою логику в массив в контроллере, как это
$scope.paths = [
{url : "url1" , condition: $scope.f1},
{url : "url2" , condition: $scope.f2},
{url : "url3" , condition: $scope.f3},
];
А затем использовать его в HTML, как это
<div ng-repeat="item in paths"> <div ng-if="item.condition" ng-include="item.url"></div> </div>
Вы можете создать объект массива и использовать ng-repeat
в теме.
HTML:
<div ng-repeat="template in templates">
<div ng-if="template.f" ng-include="template.url"> </div>
</div>
JS
//Array of objects that contain your checks and template urls
$scope.templates = [{
"url": value,
"f": value
}, {
"url": value,
"f": value
}, .....,
{
"url": value,
"f": value
}];
Хорошо использовать ng-route, но если вам не комфортно, вот один хак. Создайте один JSON-данные следующим образом:
$scope.myAllTemplate = [{
"isShown":false, "url":"/myTemplateURL1","templateName":"Template1"},{
"isShown":false, "url":"/myTemplateURL2","templateName":"Template2"},{
"isShown":false, "url":"/myTemplateURL3","templateName":"Template3"}
]
Рендеринг имени шаблона, из которого вы должны переключить событие ng-if by click
<div ng-repeat="item in myAllTemplate ">
<anyTag ng-click="changeTemplate(item)">item.templateName</anyTag>
</div>
Функция контроллера
$scope.changeTemplate = function(data){
data.isShown = true;
//here you can handle the template according to your wish
}
Наконец, визуализируйте шаблон
<div ng-repeat="item in myAllTemplate ">
<div ng-if="item.isShown" ng-include="item.url"></div>
</div>