2017-08-15 40 views
0

我以JSON格式获取数据,必须和我必须处理用户点击的项目。我写这个代码,它正确工作。如何添加和删除Angular 2中的CSS类名?

我的例子与DOM的用法:

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div *ngFor="let person of personsList; let i = index"> 
    <span class="toggle-icon" (click)="toggleStatus(person.id)" id="{{person.id}}">{{person.name}}</span> 
    </div> 
    `, 
    styles: ['.active { color: red; }'] 
}) 
export class App { 
    toggleIsActive: boolean = false; 
    personsList: any; 

    constructor() { 
    this.personsList = [ 
     { 
     "id": "1", 
     "name": "Alex" 
     }, 
     { 
     "id": "2", 
     "name": "John" 
     } 
    ] 
    } 

    toggleStatus(id){ 
    const span = document.getElementById(`${id}`); 
    if (span.className.indexOf('active') >= 0) { 
     span.classList.remove('active'); 
    } else { 
     span.classList.add('active'); 
    } 
    } 
} 

如何我能为一个类似的案件中添加和删除CSS类名,而不DOM?

+0

https://angular.io/api/common/NgClass –

回答

0

我只是添加“personIsActive”字段,并使用Class binding

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div *ngFor="let person of personsList; let i = index"> 
    <span class="toggle-icon" [class.active]="person.personIsActive" 
     (click)="toggleStatus(person.id)">{{person.name}}</span> 
    </div> 
    `, 
    styles: ['.active { color: red; }'] 
}) 
export class App { 
    toggleIsActive: boolean = false; 
    personsList: any; 

    constructor() { 
    this.personsList = [ 
     { 
     "id": "1", 
     "name": "Alex", 
     "personIsActive": false 
     }, 
     { 
     "id": "2", 
     "name": "John", 
     "personIsActive": false 
     } 
    ] 
    } 

    toggleStatus(id){ 
    for (let i = 0; i < this.personsList.length; i++) { 
     if (this.personsList[i].id === id) { 
     this.personsList[i].personIsActive= !this.personsList[i].personIsActive; 
     } 
    } 
    } 
}