我正在使用Angular 2.0 final release。如何使用Angular 2.0中的formControl訪問Native HTML Input元素
我想幹什麼? - 我只想在輸入接收焦點時顯示一些通知(警告,輸入要求)。甚至更好,當他的父母(the div
)有mouse hover
事件。
從父母(div)這樣做很容易。 Just(focus)= showNotifications()+ ngIf - 並完成作業。
但我想封裝節目的通知組件內部此功能 - 並使其可重複使用..
由於我使用@Input()
通過the control
展會的通知裏面 - 我可以,如果兩者都做這個事情我可以訪問native HTML input element
。你可以在show-notifications.component.ts
看到。下面是代碼:
app.component.html:
`<div>
<label>Name: </label>
<input formControlName="myName">
<show-notifications [the_control]="myName" ></show-notifications>
</div>`
app.component.ts:
export class AppComponent {
myName = new FormControl("defaultvalue",[some validators..])
}
顯示,notifications.component.html:
<div class="show_requirements" *ngIf="hasfocus or parentDivHasMouseHover"> // incorect code and logic - i know, but you can see the idea..
<p *ngFor="let requirement of thisInputRequirements">{{requirement}}<p>
</div>
顯示,notifications.component.ts:
export class ShowNotificationsComponent {
@Input() the_control;
this.thisInputRequirements = // take them form firebase.
this.thisInputCustomErrorMessages = // take them from firebase.
// I implemented all this and works amazing but i want to do:
//something like this:
ngOnInit(){
this.nativeInputElement = this.the_control.getNativeElement() // this of course doesn't work
// the requirements are shown only when the input receive focus
let source = Rx.DOM.focus(this.nativeInputElement);
source.subscribe(x => this.hasFocus = true)
// Or even better:
// the requirements are shown only when the parent has mouse hover
// or any other event/endles posibilites here..
let parent = getParentOf(this.nativeInputElement)
let source = Rx.DOM.mouseover(parent);
source.subscribe(x => this.parentDivHasMouseHover = true) // this will be some toggling functionality.
}
}
問:
我如何訪問本地元素因爲我有formControl(MYNAME = the_control)對象?
是否有更好的方式在單獨的組件中完成通知 - 並使其可重用?我已經在整個應用程序中成功地使用了它 - 顯示錯誤和輸入要求。
注意:我試圖首先使用hashtag語法(#myInput)傳遞hole html輸入,然後在show-notifications組件,我試圖做:myInput.myName - 訪問控制,但我得到未定義。本地輸入元素上不存在控件。我需要驗證:)
一種選擇是創建一個自定義表單控件。您可以讓用戶通過#input傳遞HTML,以便將其綁定到要使用的「ControlValueAccessor」字段。 –