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>
Другие вопросы по тегам