我想使用ngSwitch有条件地呈现一些内容,但我希望该内容是唯一要呈现给DOM的内容。我将以一个例子来说明。
这就是我目前的情况:
<div [ngSwitch]="thing.name">
<template ngSwitchWhen="foo">
<div>FOOOOOO</div>
</template>
<template ngSwitchWhen="bar">
<div>BARRRR</div>
</template>
<template ngSwitchWhen="cat">
<div>CAT</div>
</template>¯
<template ngSwitchWhen="dog">
<div>DOG</div>
</template>
</div>
我想将父元素从<div>
更改为<template>
,因此只有最内部元素才会实际插入到DOM中。我怀疑它可能是可能的,因为我知道你可以用ngFor
做类似的事情,即:
<template ngFor [ngForOf]="things" let-thing="$implicit">
然而,我还没有能够弄清楚如何让它在ngSwitch
答案 0 :(得分:11)
自最终版本发布以来,现已支持。以下代码可以应用于您的示例:
var groups:[Group]!
func numberOfSections(in tableView: UITableView) -> Int {
return groups.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return groups[section].members.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
let group = groups[section] as Group
return group.name
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell Identifier", for: indexPath)
let member = groups[indexPath.section].members[indexPath.row]
cell.imageView?.image = member.image
cell.textLabel?.text = member.designation
return cell
}
有关详细信息,请参阅documentation
答案 1 :(得分:3)
如果要删除封闭标记,可以使用ng-container而不是div。然后由你在开关盒内提供你想要的任何东西(这里是'divs')。感谢@Stephane Leger的伎俩
SqlCommand cmd = new SqlCommand("select Email from PadappaiCheckEmail where Email = @Email", con);
答案 2 :(得分:2)
从Angular 6 ng-template
或template
开始,不能使用ng-container
<div [ngSwitch]="'case 3'">
<ng-container *ngSwitchCase="'case 1'">
<li > Case 1</li>
</ng-container>
<ng-container *ngSwitchCase="'case 2'">
<li > Case 2</li>
</ng-container>
<ng-container *ngSwitchCase="'case 3'">
<li > Case 3</li>
</ng-container>
</div>
答案 3 :(得分:1)
不支持。请参阅此问题https://github.com/angular/angular/issues/3306
来自此评论https://github.com/angular/angular/issues/3306#issuecomment-125368361
这是按预期工作的。我知道这有点奇怪。但如果我们改变 它
<ul *ng-switch="value"> <li *ng-switch-when="'1'">is 1</li> <li *ng-switch-when="'2'">is 2</li> <li *ng-switch-default>is another value</li> </ul>
它会说是
<ul>
之前不应创建的ng-switch
决定需要创建它。这意味着嵌套 永远不会创建ng-switch-when
。如果ng-switch
会以某种方式 跳过它自己,它会删除会改变用户的<ul>
行为。所以没有简单的方法来创建嵌套。将
ng-switch
视为容器。它始终存在,并且想到ng-switch-when
作为可能或网络可能存在的模板。该 容器无法删除,因此无法*
答案 4 :(得分:1)
<ng-container [ngSwitch]="activeLayout">
<ng-container *ngSwitchCase="'layout1'" [ngTemplateOutlet]="template1"></ng-container>
<ng-container *ngSwitchDefault [ngTemplateOutlet]="defaultTemplate"></ng-container>
</ng-container>
这是我需要切换其他ng-template的解决方案。 我希望它对您有用。
答案 5 :(得分:0)
<div [ngSwitch] = "thing.name">
<p *ngSwitchCase="'red'">para Red</p>
<div *ngSwitchCase="foo">FOOOOOO</div>
<div *ngSwitchCase="bar">BARRRR</div>
<div *ngSwitchCase="cat">CAT</div>
<div *ngSwitchCase="dog">DOG</div>
<p *ngSwitchDefault>universe..</p>
</div>