【发布时间】:2017-12-24 22:51:59
【问题描述】:
我有一个 Angular4 应用程序,模型在输入数据时执行所有验证工作(如果输入错误,模型会抛出错误并且不设置变量),所以理想的情况是链接任何输入更改直接到与模型相关的 set 方法,这些将使组件非常精简和可扩展。 我的第一个策略是创建一个指令,我通过 setter 方法,我的指令执行 try/catch 句柄
我的 html 是:
<div class="input-field col s12" appFormSetter [setFunction]="session?.getPlayer()?.setName">
<i class="material-icons prefix">account_circle</i>
<input #input placeholder="João da Silva" type="text" class="validate"
[ngModel]='session.getPlayer()?.getName()' name="name">
<label for="first_name" class="active">Nome</label>
</div>
指令是:
import { Directive, HostListener, Input, ElementRef } from '@angular/core';
@Directive({
selector: '[appFormSetter]'
})
export class FormSetterDirective {
@Input() setFunction;
@HostListener('input') onInput() {
try {
this.setFunction(this.elRef.nativeElement.value);
} catch (error) {
// Would catch the error and show in some <small>
console.log('Error', error);
}
}
constructor(private elRef: ElementRef) {
console.log('mychildren', this.inputElement);
}
}
模型将是:
public setName(name: string): void {
if(!isValid()) throw 'myError';
this.name = name;
}
处理此类问题的最佳做法是什么? 我可以不通过指令直接通过html得到错误吗?
【问题讨论】:
标签: angular design-patterns angular2-template angular2-forms