angular2 rc.5 사용자 지정 입력, 지정되지 않은 이름을 가진 양식 제어를 위한 값 접근자 없음
나는 이런 간단한 맞춤형 입력 구성요소를 가지고 있습니다.
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.구성 요소는 다음과 같습니다.
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을 추가하여 문제를 해결했습니다. 감사합니다. @daniels.
사용자 지정 입력 구성 요소에 ngDefaultControl을 추가합니다.이렇게 하면 양방향 데이터 바인딩이 추가되므로 고유한 작업을 수행하는 경우가 아니면 값 액세스 방법을 구현할 필요가 없습니다.
<custom-input name="firstName" [(ngModel)]="firstName" ngDefaultControl></custom-input>
더하다ngDefaultControl
당신의 의견에. 예. 예를 들어.
<inline-editor type="textarea" [(ngModel)]="editableTextArea" (onSave)="saveEditable($event)" value="valor" ngDefaultControl> </inline-editor>
그리고나서import { FORM_DIRECTIVES } from '@angular/common'
;
마지막 지침:[FORM_DIRECTIVES]
이것은 효과가 있을 것입니다 :) 위의 의견에 감사드립니다.
나는 넣었습니다.[(ngModel)]
나의<option>
대신 태그 지정<select>
그래서 그래요...그것이 이것을 야기할 것입니다.
이런 일이 발생하는 또 다른 시나리오에서, 저는[(ngModel)]
최근에 재구성되고 단순화된 사용자 지정 구성 요소에 지정되었으며, 새로운 버전의 구성 요소가 방금 포함되었습니다.ngModel
방출이 있는 일반 입력 변수로 사용됩니다.
이 값으로는 충분하지 않습니다. 입력 변수의 이름을 다른 값으로 변경해야 합니다.ngModel
또는 구성 요소가 다음을 구현해야 합니다.ControlValueAccessor
interface(자세한 내용은 설명서 참조).하나 또는 다른 하나가 완료되면 더 이상 이 오류가 발생하지 않습니다.
언급URL : https://stackoverflow.com/questions/38958347/angular2-rc-5-custom-input-no-value-accessor-for-form-control-with-unspecified
'programing' 카테고리의 다른 글
데이터 정렬 충돌을 해결할 수 없음 (0) | 2023.08.04 |
---|---|
moq를 사용한 모의 정적 속성 (0) | 2023.08.04 |
해시 테이블을 키-값 쌍으로 열거하거나 키 값 집합으로 해시 테이블을 필터링하는 방법 (0) | 2023.08.04 |
HTML에서 구성 요소의 정적 변수를 각도 2에서 바인딩하는 방법은 무엇입니까? (0) | 2023.08.04 |
UPDATE를 사용하여 장시간 실행 중인 SELECT가 데이터베이스를 잠급니다. (0) | 2023.07.30 |