2013-07-29 107 views
4

是否可以更改模板ng-repeat用于动态呈现每个元素,如同在选择从表格/列表视图到备选视图的元素切换时一样,仅显示该元素?AngularJS动态更改ng-repeat指令的模板

我想要的是,在ng-repeat表/列表中选择一个元素后,只切换到所选元素的显示。但我想保留ng-repeat结构(过滤器,分页),因为我希望能够一次一个地浏览每个元素(左和右说),并且在任何时候返回到表/列表及其结构到位。

也许使用新模板切换到新路线会更容易一旦选择了某个元素,但是如何才能维护仅导航过滤的项目并在返回到该路线时恢复为保存状态ng-repeat

我希望我解释得很好,提前谢谢。

回答

10

您可以在ng-repeat指令中使用ng-switch指令。这里有一个基本的例子:

<ul> 
    <li ng-repeat="color in colors" ng-switch on="color.value" > 
    <span ng-switch-when="orange" style="background-color:{{color.value}};">{{color.name}}</span> 
    <span ng-switch-default>{{color.name}}</span> 
    </li> 
</ul> 

Full jsFiddle

UPDATE

在评论忍者裤子明确的最终目标是使用ng-include包括模板。下面是更新后的代码片段展示了如何做到这一点:

<ul> 
    <li ng-repeat="color in colors" ng-switch on="color.value" > 
    <span ng-switch-when="orange" ng-include src="'template.html'"></span> 
    <span ng-switch-when="indigo" ng-include src="'template2.html'"></span> 
    <span ng-switch-default>{{color.name}}</span> 
    </li> 
</ul> 

and a 。

+0

甚至没有想过尝试使用ng-switch,谢谢!那么我可以使用ng-switch和ng-include来交换模板吗? – adamK

+0

似乎是可能的。由于我没有任何template.urls在jsFiddle上工作,所以很难演示。我尝试使用jsFiddle标志URL作为我的模板URL,它有点作品,所以我猜测可以使用ng-includes - http://jsfiddle.net/brettdewoody/X3aAU/ –

+0

这是行不通的,我创建了一个Plunker尝试全面实施 - http://plnkr.co/edit/WZBJJNCkwAJhPwAJrOZS?p=preview –