Angular 4,使用自定义指令在不同的HTML模板之间切换

时间:2018-12-26 15:51:07

标签: angular angular2-directives angular-reactive-forms

我们使用的是反应式表格,根据某些条件,我们希望某些字段为自由文本或下拉列表。

我一直在思考实现此功能的方法,并且倾向于使用自定义指令,但不确定哪种解决方案是最好的,我正在寻找一种可重用的解决方案,因为它将在我们的应用程序中重复多次。

我正在调查类似这样的内容:How can I make a structural directive to wrap part of my DOM?

我认为使用渲染器是最好的选择,但是如果我使用属性或结构指令,这有关系吗?他们说使用结构来修改Dom,但是看起来也可以通过属性来完成。

1 个答案:

答案 0 :(得分:1)

我认为这样过度设计不是一个好主意。不要误会我的意思,您可以编写自己的自定义结构指令,您很可能就能实现所需的功能。但是此解决方案无法很好地扩展。我认为最简单的解决方案应该是最好的解决方案。这就是创建自定义组件并绑定变量,该变量将控制显示为输入的内容。

ifelse.component.html:

<mat-radio-group *ngIf="showOne;else other_content" >
  <mat-radio-button value="auto">Auto</mat-radio-button>
  <mat-radio-button value="always">Always</mat-radio-button>
  <mat-radio-button value="never">Never</mat-radio-button>
</mat-radio-group>
<ng-template #other_content>
  <mat-radio-button value="manual">Manual</mat-radio-button>
<ng-template #other_content></ng-template>

ifelse.component.ts

@Component({
  selector: 'app-ifelse',
  templateUrl: './ifelse.component.html',
  styleUrls: ['./ifelse.component.css']
})
export class IfelseComponent {

  @Input()
  private showOne: boolean;

}

用法:

<app-ifelse [showOne]="false"></app-ifelse>