作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 angular2 中单击一个图标后尝试添加多个类
这是我的代码:
import {Component, ElementRef, Renderer} from 'angular2/core';
import {CourseService} from './courses.service';
import {AutoGrowDirective} from './auto-grow.directive';
@Component({
selector: 'courses',
template: `<i (click)="onclick($event)" class="glyphicon glyphicon-star"></i>
<h3>Courses</h3>
{{title}}
<input type="text" autoGrow/>
<ul>
<li *ngFor="#course of courses">
{{course}}
</li>
</ul>`,
providers: [CourseService],
directives: [AutoGrowDirective]
})
export class CoursesComponent {
title:string = "List of course";
courses;
constructor(courseService:CourseService, private el:ElementRef, private renderer:Renderer) {
this.courses = courseService.getCourses();
}
onclick($event) {
this.renderer.setElementClass(this.el.nativeElement, 'glyphicon glyphicon-star-empty', true);
}
}
但是当我点击图标时,我的浏览器控制台抛出这个错误:
EXCEPTION: Error during evaluation of "click"
我想这是因为类之间的空格,我自己想不通的是如何在一个元素中添加多个类?
最佳答案
只需为每个类单独调用 this.renderer.setElementClass(...)
并将 isAdd
参数设置为 true
this.renderer.setElementClass(this.el.nativeElement, 'glyphicon', isAdd: true);
this.renderer.setElementClass(this.el.nativeElement, 'glyphicon-star-empty', isAdd: true);
(未测试)
更新
@Component({
selector: 'courses',
template: `<i (click)="onclick($event)" class="glyphicon glyphicon-star"></i>
<h3>Courses</h3>
{{title}}
<input type="text" autoGrow/>
<ul>
<li *ngFor="#course of courses">
{{course}}
</li>
</ul>`,
providers: [CourseService],
directives: [AutoGrowDirective]
})
export class CoursesComponent {
title:string = "List of course";
courses;
constructor(courseService:CourseService) {
this.courses = courseService.getCourses();
}
@HostBinding('class.glyphicon')
@HostBinding('class.glyphicon-star-empty')
_isGlyphIcon:boolean = false;
onclick($event) {
this._isGlyphIcon = true;
}
}
更新2
@Component({
selector: 'courses',
template: `<i (click)="onclick($event)" [ngClass]="_iconClasses"></i>
<h3>Courses</h3>
{{title}}
<input type="text" autoGrow/>
<ul>
<li *ngFor="#course of courses">
{{course}}
</li>
</ul>`,
providers: [CourseService],
directives: [AutoGrowDirective]
})
export class CoursesComponent {
title:string = "List of course";
courses;
constructor(courseService:CourseService) {
this.courses = courseService.getCourses();
}
_iconClasses:string[] = ['glyphicon', 'glyphicon-star'];
onclick($event) {
this._iconClasses = ['glyphicon', 'glyphicon-star-empty'];
}
}
关于typescript - angular2中多个类的setElementClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643331/
为什么这不起作用,如文档中所述? renderer.setElementClass(el, 'class1', false); // replace class renderer.setElement
我是一名优秀的程序员,十分优秀!