Angular 6 - 如何使用角度输入装饰器在 html 输入中设置动态类型

Posted

技术标签:

【中文标题】Angular 6 - 如何使用角度输入装饰器在 html 输入中设置动态类型【英文标题】:Angular 6 - How to set dynamic type in html input using angular input decorator 【发布时间】:2019-10-26 16:51:38 【问题描述】:

我正在使用角度 @Input 装饰器将动态类型传递给输入。它不起作用并显示 NaN 值 => type="NaN"。我怎样才能做到这一点?这是我的代码:

datepicker.html

<input  class=" value ? 'has-value' : '' "
        type="inputType"
        [(ngModel)]="value"
        [max]="getToday()"/>

datepicker.ts

@Input() inputType: string;

app.html

<app-datepicker [inputType]="datetime-local"[(ngModel)]="example1"
      (ngModelChange)="filter()"></app-datepicker>

<app-datepicker [inputType]="date"[(ngModel)]="example2"
      (ngModelChange)="filter()"></app-datepicker>

【问题讨论】:

【参考方案1】:

您需要将'' 添加到您的绑定中,否则日期选择器会假定您传递的是对象,而不是字符串。像这样:[inputType]="'datetime-local'"

<app-datepicker [inputType]="'datetime-local'"[(ngModel)]="example1"
      (ngModelChange)="filter()"></app-datepicker>

<app-datepicker [inputType]="'date'"[(ngModel)]="example2"
      (ngModelChange)="filter()"></app-datepicker>

或者,您可以像这样从属性中删除[]: 那么就不需要添加''

<app-datepicker inputType="datetime-local"[(ngModel)]="example1"
      (ngModelChange)="filter()"></app-datepicker>

<app-datepicker inputType="date"[(ngModel)]="example2"
      (ngModelChange)="filter()"></app-datepicker>

【讨论】:

【参考方案2】:

你需要将type绑定到一个变量

ChildComponent.html

<input [type]='type'>

子组件.ts

@Input() type;

App.component.html

<select (change)='change($event)'>
  <option>number</option>
  <option>date</option>
  <option>datetime-local</option>
</select>

<app-child [type]='type'></app-child>

type

App.component.ts

type;
change(ev ) 
 this.type = event.target.value;

【讨论】:

以上是关于Angular 6 - 如何使用角度输入装饰器在 html 输入中设置动态类型的主要内容,如果未能解决你的问题,请参考以下文章

Angular2:配对选择器在@Directive中做了啥

如何在基类的函数上使用装饰器并在继承基类时让装饰器在该函数上工作

如何从角度 6 中的“响应标头”获取 JWT 令牌

如何在离子 3 中使用角度 6?

简单理解装饰器在Python里面的作用

如何在不显式导入的情况下使新的装饰器在类中可用?