AngularJS:很多次使用ng-include

时间:2017-08-03 10:15:17

标签: javascript html angularjs 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来清除代码。但后来我会有很多这个标签(&gt; 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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

您可以创建一个数组对象并在其上使用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
    }];

答案 2 :(得分:0)

使用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

<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>