Angular2 Скрытые игнорирования

Я пытаюсь использовать свойство Hidden в Angular2, и когда я включаю стиль, который изменяет отображение DIV, скрытое свойство игнорируется.

При запуске кода ниже отображаются оба div. Когда я удаляю класс .displayInline, первый DIV скрыт, а второй отображается (как и ожидалось).

Можно ли использовать скрытый и отображаемый CSS вместе?

import {ComponentAnnotation as Component, ViewAnnotation as View, bootstrap, NgIf} from 'angular2/angular2';

@Component({
    selector: 'hello'
})
@View({
    template: `<style>.displayInline{ display:inline }</style><span *ng-if="name">Hello, {{name}}!</span>
    <div>
                <div [hidden]="hideDiv1()" class="displayInline">should be hidden.</div>
                <div [hidden]="hideDiv2()" class="displayInline">should be displayed.</div>
    </div>`,
    directives: [NgIf]
})
export class Hello {
    name: string = 'World';
    constructor() {
        setTimeout(() => {
          this.name = 'NEW World'
        }, 2000);
    }

    hideDiv1(){
        return true;
    }   

    hideDiv2(){
        return false;
    }
}

bootstrap(Hello);

Репозиторий: https://github.com/albi000/ng2-play

Ответы

Ответ 1

Примечание: <span> по умолчанию - "display: inline", вы можете использовать их вместо этого.

В настоящее время классы переопределяют [скрытые]. Я согласен, это не так эффективно, как ng-hide/ng-show, и я надеюсь, что он исправлен в будущих версиях angular2. В настоящее время открыто в разделе Angular2 repo.

Вы можете преодолеть проблему, просто обернув свой [скрытый] элемент классом.

<span class="someClass">
  <span [hidden]="hideDiv1()">should be hidden.</span>
</span>

Ответ 2

Я столкнулся с аналогичной проблемой с классом btn bootstrap

<button [hidden]="!visible" class="btn btn-primary">Click</button>

Я решил это, добавив

[hidden] {
  display: none;
}

в конце таблицы стилей CSS, которую я использую глобально. На данный момент проблема решена.

Ответ 3

Это, вероятно, не идеально, но вы можете использовать style.display вместо hidden, если вам нужно более мелкомасштабное управление видимостью.

<div [style.display]="active?'inherit':'none'"></div>