简体   繁体   中英

AngularJS: many times use ng-include

I have old project. In this moment i can not rewrite all to use ng-view and routes. So i have large html file and many unreadable code.

<div ng-if="f1">
  <div>...</div>
</div>
<div ng-if="f2">
  <div>...</div>
</div>
<div ng-if="f3">
  <div>...</div>
</div> ....etc

I would like to break this code into blocks and use the ng-include to clean code. But then I will have a lot of this tag(> 10). Is it normal? Is there a way to reorganize the file differently?

<div ng-if="f1" ng-include="url1"> </div>
<div ng-if="f2" ng-include="url2"> </div>
<div ng-if="f3" ng-include="url2"> </div>

You should put your logic in an array in controller like this

$scope.paths = [ 
        {url : "url1" , condition: $scope.f1},
        {url : "url2"  , condition: $scope.f2},
        {url : "url3" , condition: $scope.f3},
];

And then use it in html like this

<div ng-repeat="item in paths"> <div ng-if="item.condition" ng-include="item.url"></div> </div>

You can create an array object and use ng-repeat on it.

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
    }];

It is good to use ng-route but if you are not comfortable then here is one hack. Create one json data like this:

$scope.myAllTemplate = [{
   "isShown":false, "url":"/myTemplateURL1","templateName":"Template1"},{
   "isShown":false, "url":"/myTemplateURL2","templateName":"Template2"},{
   "isShown":false, "url":"/myTemplateURL3","templateName":"Template3"}
 ]

Rendering the name of template from where you have to toggle the ng-if by click event

<div ng-repeat="item in myAllTemplate ">
    <anyTag ng-click="changeTemplate(item)">item.templateName</anyTag>
</div>

Controller function

 $scope.changeTemplate = function(data){
     data.isShown = true;
     //here you can handle the template according to your wish 
 }

Finally, render the template

<div ng-repeat="item in myAllTemplate ">
    <div ng-if="item.isShown" ng-include="item.url"></div> 
 </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM