如何使用ng-repeat 2级别或或级别制作动态菜单

问题描述:

我有两个对象。如何使用ng-repeat 2级别或或级别制作动态菜单

1. $scope.modules=[ { "ModuleId": 1, "ModuleName": "Membership" }, 
        { "ModuleId": 2, "ModuleName": "Loan" }, 
        { "ModuleId": 3, "ModuleName": "News" }, 
        { "ModuleId": 4, "ModuleName": "Contact Us" }, 
        { "ModuleId": 5, "ModuleName": "About Us" }, 
        { "ModuleId": 6, "ModuleName": "FeedBack" }, 
        { "ModuleId": 7, "ModuleName": "Fee" }, 
        { "ModuleId": 8, "ModuleName": "Home" } ] 

2. $scope.subModules=[ { "ModuleId": 1, "SubModuleId": 1, "SubModuleName": "Get Membership" }, 
         { "ModuleId": 7, "SubModuleId": 2, "SubModuleName": "Fee Structure" }, 
         { "ModuleId": 7, "SubModuleId": 3, "SubModuleName": "Fee Submission" }, 
         { "ModuleId": 1, "SubModuleId": 4, "SubModuleName": "Our Members" }, 
         { "ModuleId": 7, "SubModuleId": 5, "SubModuleName": "Fee Status" }, 
         { "ModuleId": 2, "SubModuleId": 6, "SubModuleName": "Loan Structure" }, 
         { "ModuleId": 2, "SubModuleId": 7, "SubModuleName": "form" }, 
         { "ModuleId": 1, "SubModuleId": 8, "SubModuleName": "Inquiry" } ] 

我想创建,现在,如果菜单有子菜单,有两个级别的动态菜单有下拉菜单。 我想要一个像这样的图像显示输出...

告诉我如何把HTML重复ng。如何从两个对象上面创建所需的json对象。

enter image description here

我知道如何把HTML N以外的东西。只要帮助我ng-repeat和UL和LI。否则我会管理。

这样做的最简单的方法是,如果你可以在modules阵列与subModules阵列,像这样(只包括模块1为清楚起见)相结合:

$scope.modules = [ 
    {ModuleId: 1, ModuleName: 'Membership', SubModules: 
     [ 
      { "ModuleId": 1, "SubModuleId": 1, "SubModuleName": "Get Membership" } 
      { "ModuleId": 1, "SubModuleId": 4, "SubModuleName": "Our Members" }, 
      { "ModuleId": 1, "SubModuleId": 8, "SubModuleName": "Inquiry" } 
     ] 
    } 
]; 

如果你的模型是这样的,你可以很容易地嵌套NG-重复:

<ul> 
    <li ng-repeat="module in modules"> 
     {{module.ModuleName}} 
     <ul> 
      <li ng-repeat="subModule in module.SubModules"> 
       {{subModule.SubModuleName}} 
      </li> 
     </ul> 
    </li> 
</ul> 

,如果你因为某些原因不能让你的模块/子模块一样,(对于intstance从你无法控制的服务器加载它们),你可以简单地创建在y中加入这个模型我们的控制器:

angular.forEach($scope.modules, function(module){ 
    module.SubModules = []; 
    angular.forEach($scope.subModules, function(subModule){ 
     if(subModule.ModuleId === module.ModuleId){ 
      module.SubModules.push(subModule); 
     } 
    }); 
}); 
+0

这是我长时间卡住的地步。我不知道如何制作一个json,就像你在第一段中展示的那样。如果你能从我的代码中帮助我。 – micronyks 2014-10-12 15:20:34

+0

在你的代码中,它看起来像你的模块/子模块数组是硬编码的。如果是这样的话,您可以简单地按照我的第一个片段中的模式,将子模块放置在模块内的数组中。如果您无法控制JSON的外观,可以使用第三个代码片段中的代码,将子模块注入每个模块对象的“SubModules”字段。 – 2014-10-12 15:27:31

+0

不支持其未硬编码。让我试试你的片段,让我检查一下。 – micronyks 2014-10-12 15:38:45