关键词:
【中文标题】异步验证器不适用于 Angular 中的模板驱动表单【英文标题】:Async Validator not working with Template driven Forms in Angular 【发布时间】:2017-10-18 01:31:52 【问题描述】:我为我的模板驱动表单创建了一个异步验证器。
import Directive, forwardRef from "@angular/core";
import NG_ASYNC_VALIDATORS, Validator, AbstractControl, AsyncValidator from "@angular/forms";
import Observable from "rxjs";
@Directive(
selector: '[asyncValidator][ngModel]',
providers: [
provide: NG_ASYNC_VALIDATORS, useExisting: forwardRef(() => AsyncAgeValidator), multi: true
]
)
export class AsyncAgeValidator implements Validator
validate(c: AbstractControl): Observable<[key : number] : any>
return this.validateAgeObservable(c.value);
validateAgeObservable( age: number )
return new Observable(observer =>
if( age === 20 )
observer.next(null);
else
observer.next(asyncInvalid: true);
console.log('validate');
);
我在我的模板中使用它,如下所示,但我没有从模板中的验证器中得到我期望的错误消息。该调用将发送给验证器,但我猜它没有在组件中注册可观察对象。
<md-input-container>
<input mdInput type="number" name="age" [(ngModel)]="user.age" placeholder="Age" required asyncValidator>
</md-input-container>
【问题讨论】:
【参考方案1】:添加到 yurzui 的第二个答案:
这行得通:
validate(c: AbstractControl): Observable<[key : number] : any>
return this.validateAgeObservable(c.value).first();
这样做:
validate(c: AbstractControl): Observable<[key : number] : any>
return this.validateAgeObservable(c.value).take(1);
【讨论】:
【参考方案2】:您的 observable 永远不会完成,因此 Angular 不知道何时更改表单状态。所以记住你的 observable 必须完成。
您可以通过多种方式实现此目的:
1) 在观察者上手动调用complete()
方法:
validateAgeObservable( age: number )
return new Observable(observer =>
observer.next(age === 20 ? null : asyncInvalid: true);
observer.complete();
);
Plunker Example
2) 调用first()
方法:
validate(c: AbstractControl): Observable<[key : number] : any>
return this.validateAgeObservable(c.value).first();
validateAgeObservable( age: number )
return new Observable(observer =>
observer.next(age === 20 ? null : asyncInvalid: true);
);
Plunker Example
【讨论】:
您好!你知道这个问题的答案吗? ***.com/questions/44044163/…表单验证不适用于 Ionic 2 中的 Angular 2 FormBuilder
】表单验证不适用于Ionic2中的Angular2FormBuilder【英文标题】:FormvalidationisnotworkingwithAngular2FormBuilderinIonic2【发布时间】:2017-02-0523:45:01【问题描述】:我正在构建一个Ionic2(打字稿)应用程序。在复选框(ion-checkbox标记)中的简... 查看详情
Angular - 模板驱动的表单 - 控制器中的自定义验证器功能
】Angular-模板驱动的表单-控制器中的自定义验证器功能【英文标题】:Angular-Templatedrivenforms-customvalidatorfunctioninthecontroller【发布时间】:2019-03-2306:30:29【问题描述】:由于在ngModel中使用响应式表单是deprecatedinAngular6,并且我的项... 查看详情
如何通过模板驱动形式验证 Angular 7 中的下拉列表
】如何通过模板驱动形式验证Angular7中的下拉列表【英文标题】:Howtovalidatedropdowninangular7bytemplatedrivenform【发布时间】:2020-11-1122:14:11【问题描述】:尝试验证下拉选择框但不工作。可能是css问题?那么如何验证它。如果有人知... 查看详情
Angular/Rxjs 管道异步不适用于 s-s-r?
】Angular/Rxjs管道异步不适用于s-s-r?【英文标题】:Angular/Rxjspipeasyncdoesnotworkwiths-s-r?【发布时间】:2020-09-2611:17:39【问题描述】:我在s-s-r上运行的异步管道存在问题。没有错误,只有一个无限循环(似乎服务器正在等待解析obser... 查看详情
必需属性不适用于Angular Js中的文件输入
】必需属性不适用于AngularJs中的文件输入【英文标题】:RequiredattributeNotworkingwithFileinputinAngularJs【发布时间】:2013-04-1821:38:58【问题描述】:我的表单中有一个文件上传控件。我正在使用AngularJS。当我输入所需的属性来验证文件... 查看详情
Angular 2 模板驱动的表单组验证
】Angular2模板驱动的表单组验证【英文标题】:Angular2templatedrivenformgroupvalidation【发布时间】:2017-06-2707:57:15【问题描述】:我有一个关于angular2模板驱动表单的问题。我已经设置了其中一个表单,如果表单组中的一个输入无效,... 查看详情
通过 Angular 调用时,Windows 身份验证不适用于 WebAPI
】通过Angular调用时,Windows身份验证不适用于WebAPI【英文标题】:WindowsAuthenticationisnotworkingwithWebAPIwhencalledthroughAngular【发布时间】:2017-03-1321:49:54【问题描述】:我有两个项目,一个是MVC(使用Angular),另一个是WebAPI。Windows身... 查看详情
Angular 4 表单验证器 - minLength 和 maxLength 不适用于字段类型号
】Angular4表单验证器-minLength和maxLength不适用于字段类型号【英文标题】:Angular4FormValidators-minLength&maxLengthdoesnotworkonfieldtypenumber【发布时间】:2018-02-1803:52:55【问题描述】:我正在尝试开发一个联系表单,我希望用户输入长度... 查看详情
在模板中使用异步管道可观察到的不适用于单个值
】在模板中使用异步管道可观察到的不适用于单个值【英文标题】:ObservablewithAsyncPipeintemplateisnotworkingforsinglevalue【发布时间】:2017-01-1020:07:23【问题描述】:我有一个组件向我的服务请求Observable对象(即底层的http.get返回一个... 查看详情
嵌套组件不适用于 Angular 中的路由
】嵌套组件不适用于Angular中的路由【英文标题】:Nested-ComponentsnotworkingwithRoutinginAngular【发布时间】:2020-12-2318:20:44【问题描述】:我正在尝试在自己的项目中学习角度,我从处理路由路径:/开始,即在(app.routing.module.ts)中渲染... 查看详情
angular自定义验证器添加入模板驱动表单
创建自定义验证器的命令nggeneratedirectiveforbidden-name(自定义床啊金验证器的名称)生成的文件内容import{Directive}from'@angular/core';@Directive({selector:'[appForbiddenName]'})exportclassForbiddenNameDirective{const 查看详情
模板驱动表单中的表单验证问题
...【发布时间】:2019-04-1612:03:09【问题描述】:我正在使用Angular6开发一个Web应用程序。我想创建一些受HTML输入组件启发的自定义组件。例如:CustomComponent.ts(打字稿)@Component(selector:\'custom-component\',templ 查看详情
angular2模板驱动的表单验证问题
】angular2模板驱动的表单验证问题【英文标题】:angular2templatedrivenformvalidationissue【发布时间】:2018-03-0103:32:05【问题描述】:我对angular2模板驱动的表单验证有问题,以下是我的表单的代码。<h1>page_title</h1><div*ngIf="suc... 查看详情
模型绑定不适用于angular2中的选择[重复]
】模型绑定不适用于angular2中的选择[重复]【英文标题】:modelbindisnotworkingwithselectinangular2[duplicate]【发布时间】:2016-08-1410:18:06【问题描述】:我正在尝试设置下拉菜单的默认值,我为模型设置了默认值但它没有更新选择请看http... 查看详情
PhantomJS 不适用于 Angular2 项目中的 Karma
】PhantomJS不适用于Angular2项目中的Karma【英文标题】:PhantomJSdoesnotworkwithKarmainAngular2project【发布时间】:2017-03-0800:33:30【问题描述】:我使用angularcli(1.0.0-rc1.0.0)创建了一个开箱即用的项目。然后我安装了PhantomJS插件(npminstallkarma... 查看详情
ngrok 不适用于浏览器中的路径(Angular Webserver)
】ngrok不适用于浏览器中的路径(AngularWebserver)【英文标题】:ngrokdoesn\'tworkwithpathinbrowser(AngularWebserver)【发布时间】:2021-03-2205:37:22【问题描述】:我目前正在使用Angular开发一个网站,并且我正在使用Apache2将它托管在我的Raspbe... 查看详情
Angular WithCredentials 不适用于 POST、PUT
】AngularWithCredentials不适用于POST、PUT【英文标题】:AngularWithCredentialsnotworkingforPOST,PUT【发布时间】:2018-05-0209:02:19【问题描述】:我正在开发一个Angular网站:•localhost/test上的.NetFramework服务器•本地主机上的客户端:4200我的cook... 查看详情
mirage.js 不适用于 Angular 中的子 url 路径(仅适用于根路径)
】mirage.js不适用于Angular中的子url路径(仅适用于根路径)【英文标题】:mirage.jswillnotworkwithsuburlpaths(onlywithrootpath)inangular【发布时间】:2020-06-0913:36:41【问题描述】:当通过根url(localhost:4200/)执行后端调用时,Mirage确实匹配定义... 查看详情