我有一个我正在研究的Angular 2应用程序,出于与遗留代码的一些兼容性原因,需要通过应用程序组件上使用的属性获取一些信息.例如,启动angular 2应用程序的html将如下所示:
<myApp id="xyz" areaDone="true" value="" requestID="abc"> Loading ... </myApp>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试围绕应该根据这些属性的存在和值发生的行为编写一些单元测试时,它们是null/undefined.
要获取值,我们只是在构造函数中将它们拉出来,如下所示:
let native = this.elementRef.nativeElement;
this.requestID= native.getAttribute("requestID");
Run Code Online (Sandbox Code Playgroud)
那么,是否有一种方法可以通过测试平台/提供程序来强制应该具有预期属性的本机元素?
我正在使用 Reactive Forms 模块(https://angular.io/docs/ts/latest/cookbook/dynamic-form.html)阅读有关动态表单的 Angular 2 食谱
我注意到他们定义了如何动态创建表单控件,例如:
questions.forEach(question => {
group[question.key] = question.required ? new FormControl(question.value || '', Validators.required)
: new FormControl(question.value || '');
});
Run Code Online (Sandbox Code Playgroud)
一开始这看起来很棒,但是如果您有多个或自定义验证器,那么最好的方法是什么?例如,如果我有一个现有的表单控件被定义为
this.myForm= this.formBuilder.group({
inputField: [this.myObject.inputValueField, [Validators.required,Validators.minLength(4),
forbiddenValueValidator(5000)]]
});
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,我将有一个必需的输入,最小长度为 4,不能等于 5000,由自定义验证函数强制执行。
抱歉,如果有这样的重复项,但我找不到任何真正指向通过实例化新 FormControl 解决多个验证器的动态/元驱动方法的任何内容
编辑:
这是我修复的潜在想法:
我确实认为我现在已经弄清楚了,大致是这样的:
validations = {
required: true,
minLength:true,
customCalls: [forbiddenValueValidator(5000)]
};
let myValidators = [];
if(this.validations.required) {
myValidators .push(Validators.required);
}
if(this.validations.minLength) {
myValidators .push(Validators.minLength(4));
}
if(this.validations.customCalls && this.validations.customCalls.length > 0) {
for (let customCall of this.validations.customCalls) { …Run Code Online (Sandbox Code Playgroud)