2016-01-22 51 views
0

同时采用嵌套“NG重复”和ng-switch指令渲染根据所提供的列定义和行数据(2个不同的JSON对象)表我得到错误:NG-开关不能使用嵌套NG-重复工作表

有没有什么办法可以在不使用包装元素的情况下使用'ng-repeat'和ng-switch来渲染表格单元格。

Error: [$compile:ctreq] Controller 'ngSwitch', required by directive 'ngSwitchWhen', can't be found! 

这里是我的表模板,我周围

<table id={{metaData.id}} name="{{metaData.name}}" class="{{metaData.classes}}"> 
<tbody> 
    <tr ng-repeat="record in data"> 
     <td ng-repeat="col in metaData.columns" ng-switch on="col.type" 
     ng-switch-when="index"> {{record.$index + 1}} </td> 
    </tr> 
</tbody> 

工作时提出的是

我使用ng-if渲染表cellrows动态地以下方式:

<table id={{metaData.id}} name="{{metaData.name}}" class="{{metaData.classes}} vk-table" > 
     <tbody> 
      <tr ng-repeat="record in data | orderBy : sortBy : reverse"> 
       <td ng-repeat-start="col in metaData.columns" ng-if="col.type == 'index'"> {{$parent.$parent.$index + 1}}. </td> 
       <td ng-if="col.type =='name'">{{record.name = [record.fname, record.mname, record.lname].join(' ') }}</td> 
       <td ng-if="col.type =='date'">{{record[col.dataKey] = toDate(record[col.dataKey]) | date : 'mediumDate'}}</td> 
       <td ng-if="col.type =='inMobile'"> 
        <a href="tel:{{record[col.dataKey]}}">{{record[col.dataKey]}}</a> 
       </td> 
       <td ng-if="col.type =='email'"> 
        <a href="mailto:{{record[col.dataKey]}}">{{record[col.dataKey]}}</a> 

       </td> 
       <td ng-if="col.type =='gender'">{{record[col.dataKey] == 'm' ? 'Male' : 'Female'}}</td> 
       <td ng-if="col.type =='place'">{{record[col.dataKey].name}}</td> 
       <td ng-repeat-end ng-if="!col.type">{{record[col.dataKey]}}</td> 
      </tr> 
     </tbody> 
    </table> 

如何在不使用其他元素的情况下使用ng-switch实现相同的输出?

+0

我只是不想使用额外的包装元素。 – Vikram

+0

目前还不清楚你到底想要达到什么目标。为什么你首先使用ng-switch? –

+0

@GiladBeeri:我更新了**下的问题。希望现在很清楚。 – Vikram

回答

0

ng-switch-when指令应该应用于应用ng-switch指令的元素的子元素。就你而言,你将它们应用于相同的元素。

尝试(内TBODY)

<tr ng-repeat="record in data | orderBy : sortBy : reverse"> 
    <td ng-repeat="col in metaData.columns"> 
     <div ng-switch on="col.type"> 
      <div ng-switch-when="index"> 
       {{record.$index + 1}} 
      </div> 
      <div ng-switch-when="name"> 
       {{record.name = [record.fname, record.mname, record.lname].join(' ') }} 
      </div> 
      <div ng-switch-when="date"> 
       {{record[col.dataKey] = toDate(record[col.dataKey]) | date : 'mediumDate'}} 
      </div> 
      <div ng-switch-when="inMobile"> 
       <a href="tel:{{record[col.dataKey]}}">{{record[col.dataKey]}}</a> 
      </div> 
      <div ng-switch-when="email"> 
       <a href="mailto:{{record[col.dataKey]}}">{{record[col.dataKey]}}</a> 
      </div> 
      <div ng-switch-when="gender"> 
       {{record[col.dataKey] == 'm' ? 'Male' : 'Female'}} 
      </div> 
      <div ng-switch-when="place"> 
       {{record[col.dataKey].name}} 
      </div> 
      <div ng-switch-default> 
       {{record[col.dataKey]}} 
      </div> 
     </div> 
    </td> 
</tr> 
+0

谢谢你的回答。我想避免额外的标记。 – Vikram

+0

哪个附加标记? 2层div元素?请注意,ngSwitchWhen必须是ngSwitch的子级,因此您需要添加至少一个图层。也许把ngSwitch作为td的一个属性是可行的。 –

+0

'ng-switch'属性不适用于我的用例。我正在处理另一项工作,并很快发布此方案的答案。谢谢你的时间。 – Vikram