【发布时间】:2016-07-15 12:17:33
【问题描述】:
我正在尝试make a component,它将显示给定控制输入名称的特定错误消息。 这是我的代码...
register.ts:
import { Component } from 'angular2/core';
import { FormBuilder, Validators } from 'angular2/common';
import {ControlMessages} from './control-msg';
@Component({
selector: 'registration-form',
templateUrl: './app/components/registration/registration.html',
directives: [ControlMessages]
})
控制-msg.ts:
import {Component, Host} from 'angular2/core';
import {NgFormModel,FORM_PROVIDERS} from 'angular2/common';
@Component({
selector: 'control-messages',
inputs: ['controlName: control'],
template: `<div *ngIf="errorMessage !== null">{{errorMessage}}</div>`
})
export class ControlMessages {
controlName: string;
constructor( @Host() private _formDir: NgFormModel){/* _formDir doesn't get the parent object! */}
get errorMessage() {
// Find the control in the Host (Parent) form
let c = this._formDir.form.find(this.controlName);
return null;
}
}
问题是您可以看到ControlMessages 无法获得我父母NgFormModel 的值。
Angular 2 向我显示了这个错误,
例外:没有 NgFormModel 的提供者! (ControlMessages -> NgFormModel)
如果我在 ControlMessages 中包含 NgFormModel 作为提供程序,它会显示此错误,
异常:TypeError:无法在 [errorMessage !== null in ControlMessages@0:5] 中读取属性 'find'
请注意,在引导应用程序时我没有注入任何提供程序。
我正在使用 angular2 beta 12。
编辑:
表单模板:
<div class="form-group"
[class.has-error]="!registerForm.find('username').valid && registerForm.find('username').dirty">
<label for="username">Username</label>
<input type=text id="username" class="form-control" placeholder="username"
[ngFormControl]="registerForm.find('username')">
<control-messages control="username"></control-messages>
</div>
【问题讨论】:
-
您是否将
FORM_PROVIDERS注入到引导函数中? -
能否添加更多代码(
RegistrationForm类,模板) -
ControlMessages 组件嵌套在一个 div 中。这就是它没有得到父对象的原因。
标签: angular angular2-directives angular2-forms angular2-formbuilder