Lola
Lola

Reputation: 2648

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>

Upvotes: 1

Views: 325

Answers (3)

Vivz
Vivz

Reputation: 6630

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

Upvotes: 1

jesusverma
jesusverma

Reputation: 1745

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>

Upvotes: 0

Ghulam Mohayudin
Ghulam Mohayudin

Reputation: 1113

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>

Upvotes: 3

Related Questions