'classList' 在 angular2 中使用 setElementClass 时未定义
'classList' is undefined when using setElementClass in angular2
这是我的代码...
constructor(private loginService: LoginService,
private router: Router,
private renderer: Renderer) { }
@ViewChild('element') private element: ElementRef;
this.renderer.setElementClass(this.element, 'shake', false);
它导致'无法读取未定义的属性 'classList''
如果我这样改...
this.renderer.setElementClass(this.element.nativeElement, 'shake', false);
它导致'无法读取未定义的属性 'nativeElement''
如何重新设置元素的 class?
我在您得到的结果中看到的问题是组件没有找到 ElementRef 子组件(@ViewChild
装饰器寻找子组件)。我通常使用构造函数来注入 ElementRef
,而不是 @ViewChild
装饰器。
尝试将 private element: ElementRef
添加到构造函数的参数列表中。这对我一直有效。
import { Component, AfterViewInit } from '@angular/core';
@Component(...)
export class MyComponent implements AfterViewInit {
constructor(
private loginService: LoginService,
private router: Router,
private renderer: Renderer,
private elementRef: ElementRef
) { }
ngAfterViewInit() {
this.renderer.addClass(this.elementRef.nativeElement, 'shake');
}
}
此示例将要求您更新 class 签名以实施 AfterViewInit
,必须从 @angular/core
导入
以下是获取 Dom 元素的方法:
component.html
<div #myDiv></div>
component.ts
@ViewChild('myDiv') private myDiv: ElementRef;
ngAfterViewInit () {
this.renderer.setElementClass(this.myDiv.nativeElement, 'shake', true); } }
}
这是一个有效的插件:DEMO
这是我的代码...
constructor(private loginService: LoginService,
private router: Router,
private renderer: Renderer) { }
@ViewChild('element') private element: ElementRef;
this.renderer.setElementClass(this.element, 'shake', false);
它导致'无法读取未定义的属性 'classList''
如果我这样改...
this.renderer.setElementClass(this.element.nativeElement, 'shake', false);
它导致'无法读取未定义的属性 'nativeElement''
如何重新设置元素的 class?
我在您得到的结果中看到的问题是组件没有找到 ElementRef 子组件(@ViewChild
装饰器寻找子组件)。我通常使用构造函数来注入 ElementRef
,而不是 @ViewChild
装饰器。
尝试将 private element: ElementRef
添加到构造函数的参数列表中。这对我一直有效。
import { Component, AfterViewInit } from '@angular/core';
@Component(...)
export class MyComponent implements AfterViewInit {
constructor(
private loginService: LoginService,
private router: Router,
private renderer: Renderer,
private elementRef: ElementRef
) { }
ngAfterViewInit() {
this.renderer.addClass(this.elementRef.nativeElement, 'shake');
}
}
此示例将要求您更新 class 签名以实施 AfterViewInit
,必须从 @angular/core
以下是获取 Dom 元素的方法:
component.html
<div #myDiv></div>
component.ts
@ViewChild('myDiv') private myDiv: ElementRef;
ngAfterViewInit () {
this.renderer.setElementClass(this.myDiv.nativeElement, 'shake', true); } }
}
这是一个有效的插件:DEMO