我有一段代码:
document.getElementById('loginInput').value = '123';
但是在编译代码时,我收到以下错误:
属性值在HTMLElement类型上不存在。
我已经声明了一个变量:value: string;
我该如何避免这个错误?
谢谢。
我有一段代码:
document.getElementById('loginInput').value = '123';
但是在编译代码时,我收到以下错误:
属性值在HTMLElement类型上不存在。
我已经声明了一个变量:value: string;
我该如何避免这个错误?
谢谢。
如果您想设置值,那么您可以在单击或某个事件触发时在某个函数中执行相同的操作。
同时,您可以使用像这样的本地变量使用ViewChild
来获取值
<input type='text' id='loginInput' #abc/>
并可以像这样获得价值
this.abc.nativeElement.value
好的,明白了,你需要像这样使用angular2的ngAfterViewInit
方法来实现相同的功能。
ngAfterViewInit(){
document.getElementById('loginInput').value = '123344565';
}
ngAfterViewInit
不会抛出任何错误,因为它会在模板加载后渲染。
(<HTMLInputElement>document.getElementById('loginInput')).value = '123';
Angular无法直接使用HTML元素,因此您需要通过将上述通用绑定到它来指定元素类型。
更新:
这也可以使用ViewChild和#localvariable完成,如这里所示。
<textarea #someVar id="tasknote"
name="tasknote"
[(ngModel)]="taskNote"
placeholder="{{ notePlaceholder }}"
style="background-color: pink"
(blur)="updateNote() ; noteEditMode = false " (click)="noteEditMode = false"> {{ todo.note }}
</textarea>
import {ElementRef,Renderer2} from '@angular/core';
@ViewChild('someVar') el:ElementRef;
constructor(private rd: Renderer2) {}
ngAfterViewInit() {
console.log(this.rd);
this.el.nativeElement.focus(); //<<<=====same as oldest way
}
ngModel
并完全跳过document.getElementById('loginInput').value = '123';
。而是:<input type="text" [(ngModel)]="username"/>
<input type="text" [(ngModel)]="password"/>
username: 'whatever'
password: 'whatever'
完整的Angular方式(通过Id设置/获取值):
// 在HTML标签中
<button (click) ="setValue()">Set Value</button>
<input type="text" #userNameId />
// 在组件的 .ts 文件中
export class testUserClass {
@ViewChild('userNameId') userNameId: ElementRef;
ngAfterViewInit(){
console.log(this.userNameId.nativeElement.value );
}
setValue(){
this.userNameId.nativeElement.value = "Sample user Name";
}
}
<input type='text' id='loginInput'/>
? - Natalia