1

Я играю с ngClass, и я не знаю, что я делаю неправильно. Это показывает странное поведение. Кажется, что когда я назначаю функцию ngClass, она не работает, но если я назначу ей литерал объекта, она будет работать. Как я могу заставить ngClass работать с моей функцией Component?ngClass не работает, как должно

ProposalForm.ts

import {Component} from 'angular2/core'; 
import {NgClass} from 'angular2/common'; 
@Component({ 
    selector: 'proposal-form', 
    template: ` 
    <div [ngClass]="setClasses()"> 
    ghtfhg 
    </div> 
    <div [ngClass]="{active:true, disabled:true}"> 
    1111111 
    </div>`, 
    directives:[NgClass] 
}) 
export class ProposalForm { 

    setClasses() { 
    return {active:true, disabled:true}; 
    } 
} 

Глядя на инспектора Хрома этого является HTML

<proposal-form _ngcontent-xxb-2=""> 
<div class=""> 
    ghtfhg 
</div> 
<div class="active disabled"> 
    1111111 
</div></proposal-form> 
+0

См https://github.com/angular/angular/issues/7426 –

ответ

0

Вы не предоставляют много информации о том, что и как она не работает. Я предполагаю, что проблема заключается в том, что setClasses() всегда возвращает другой объект, и определение изменения углов не нравится.

Вы должны вместо этого привязать к полю

classes = {active:true, disabled:true}; 

, а затем обновить значение classes когда значение зависит от изменений.

+0

Спасибо, что решил это. Но почему не связала ngClass с функцией? В этом простом примере объект не изменяется. Поэтому я предполагал, что когда Angular загружает компонент и вызывает функцию, он похож на просто чтение объекта из свойства компонента. – WShell

+1

Да, это меняется. Каждый раз, когда выполняется определение углового изменения, он вычисляет выражение привязки 'setClasses()' и каждый раз, когда он получает экземпляр нового объекта. Для Angular не имеет значения, что контент один и тот же. Это новый объект, и когда он сравнивает личность предыдущего и текущего возвращаемого значения, они не равны. –

2

@WShell. Вы все делаете правильно. Тем не менее, я сообщил об этой проблеме угловой команде, и они подтвердили, что это ошибка. Установка классов, как у вас, из компонента с помощью метода setClasses не работает в последних нескольких сборках Angular2. Сейчас вы должны установить классы динамически рядный так:

[ngClass]="{active: isOn, disabled: isDisabled}" 

Как сообщалось в выпуске: https://github.com/angular/angular/issues/7426

+0

О, надеюсь, это поможет вам, поскольку это кажется более правильным – Nige

Смежные вопросы