angular2 rc.5自定义输入,用于具有未指定名称的表单控件的无值访
发布时间:2020-12-17 08:25:50 所属栏目:安全 来源:网络整理
导读:我有这样简单的自定义输入组件, import {Component,Provider,forwardRef} from "@angular/core";import {ControlValueAccessor,NG_VALUE_ACCESSOR} from "@angular/forms";const noop = () = {};const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = { provid
我有这样简单的自定义输入组件,
import {Component,Provider,forwardRef} from "@angular/core"; import {ControlValueAccessor,NG_VALUE_ACCESSOR} from "@angular/forms"; const noop = () => {}; const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = { provide: NG_VALUE_ACCESSOR,useExisting: forwardRef(() => CustomInputComponent),multi: true }; @Component({ selector: 'custom-input',template: ` <input class="form-control" [(ngModel)]="value" name="somename" (blur)="onTouched()"> `,providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR] }) export class CustomInputComponent implements ControlValueAccessor{ //The internal data model private _value: any = ''; //Placeholders for the callbacks private _onTouchedCallback: () => void = noop; private _onChangeCallback: (_:any) => void = noop; //get accessor get value(): any { return this._value; }; //set accessor including call the onchange callback set value(v: any) { if (v !== this._value) { this._value = v; this._onChangeCallback(v); } } //Set touched on blur onTouched(){ this._onTouchedCallback(); } //From ControlValueAccessor interface writeValue(value: any) { this._value = value; } //From ControlValueAccessor interface registerOnChange(fn: any) { this._onChangeCallback = fn; } //From ControlValueAccessor interface registerOnTouched(fn: any) { this._onTouchedCallback = fn; } } 我有这样的应用程序模块, /** * Created by amare on 8/15/16. */ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { ReactiveFormsModule,FormsModule } from '@angular/forms'; import { AppComponent } from './app/app.component'; import {CustomInputComponent} from "./app/shared/custom.input.component"; import {RouterModule} from "@angular/router"; @NgModule({ imports: [ BrowserModule,ReactiveFormsModule,FormsModule,RouterModule ],declarations: [ AppComponent,CustomInputComponent],bootstrap: [ AppComponent ] }) export class AppModule { } 和主要 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app.module'; platformBrowserDynamic().bootstrapModule(AppModule); 并且我已经使用我的一个组件的自定义输入,如下所示,但是我获得了“没有指定名称属性的表单控件的值访问器”。 <custom-input name="firstName" [(ngModel)]="firstName"></custom-input> 而app.component看起来像这样 import { Component } from '@angular/core'; @Component({ moduleId: module.id,selector: 'app-root',templateUrl: 'app.component.html',styleUrls: ['app.component.css'] }) export class AppComponent { title = 'app works!'; firstName: string; }
将ngDefaultControl添加到主机中的自定义输入组件解决了这个问题,谢谢@danieleds
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |