angular - 如何以角度向@Input添加验证?
问题描述
如何在 Angular 中添加验证,以便在您提供不在您提供的选项中的选项@Input
时,Angular 会引发错误。@Input
我尝试使用枚举,但枚举无法验证模板中的变量。
我当前的工作实现是使用 if 语句。例如:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'dropdown',
templateUrl: './dropdown.component.html',
styleUrls: ['./dropdown.component.scss']
})
export class DropdownComponent implements OnInit {
@Input() option;
validOptions = ['option1','option2','option3','option4','option5'];
constructor() { }
ngOnInit() {
this.validateOptionInput()
}
validateOptionInput(){
this.validOptions.forEach(myFunction);
function myFunction(value) {
if((this.validOptions != value){
throw({error: `${value} is not a valid input variable. The valid options are: ${this.validOptions}`})
} else {
return;
}
}
}
}
有没有办法使用枚举或内置的方式来做同样的事情?
解决方案
枚举只是一组常量。如果要添加验证 ==> 必须在运行时完成,例如:
const validOptions = ['option1','option2','option3','option4','option5'];
export class DropdownComponent {
@Input() set option(v: any) {
if (validOptions.includes(v)) {
this._option = v;
} else {
// handle error
}
}
get option(): any {
return option;
}
private _option: any;
}
您也可以使用一些验证库,但它仍然很重。我更喜欢使用类型并strictTemplates
经常使用角度编译选项来检测错误的类型分配。
推荐阅读
- matlab - 您如何交叉关联音频文件以查看样本是否与原始文件匹配?
- sql-server - VB Net - SQL - 比较文本框的值和 SQL 值
- mysql - 列的页面溢出(InnoDB)如何在 MySQL 中工作?
- laravel - Laravel belongsTo() 为结果中的第一个关系返回 null
- hyperlink - MS Edge PDF 查看器是否会去除适用于 Windows 10 版本 1909 的 IE 中的 PDF 链接?
- java - 自 Andriod 11 以来应用程序活动上方的黑色死区
- python - 将多个值包装在单个 JSON 中并存储在模型中 - Django
- c# - 列出当前目录中某个文件夹中的某些项目
- python - 在 python tkinter 中制作游戏计时器的问题
- c - 在另一个结构中构造 tm 时间