В Angular 2 возможно ли fadeIn/fadeout вместо [hidden = 'xxx]?

В Angular 2 возможно ли fadeIn/fadeout вместо [hidden = 'xxx]?

У меня есть фрагмент

<div  [hidden]="visible">

и хотите, чтобы он исчезал при видимых изменениях...

ТХ

Шон

Ответы

Ответ 1

Жаль, что я немного опаздываю на вечеринку на этом.

Это очень простой способ сделать это, и я реализовал это в своем приложении. Используйте анимацию CSS3, добавляя и вычитая классы.

Сначала в файле компонента css:

.show{
opacity: 1 !important;
}
.step{
opacity: 0;
transition: .5s ease-in-out all;
}

Далее, условно добавьте свой класс к элементу.

<div [class.show]="!booleanFromComponentClass" class="step">
  <h4>All of these elements will be faded out using a CSS3 opacity transition.</h4>
  <div>
     this element will fade out also when the booleanFromComponentClass variable is false
  </div>
</div>

Вы также можете воспользоваться любым свойством, включая относительное положение элемента и анимацию слайда страницы.

Если Angular2 когда-либо реализует анимацию, я могу гарантировать, что они используют анимацию CSS3 путем условного добавления и вычитания классов.

Ответ 2

Если кто-нибудь придет сюда, чтобы найти угловое решение, вот и все,

В HTML-шаблон

<a (click)="toggle()">toggle state</a>

<div [@visibilityChanged]="visiblityState" >    
   some content
</div>

В компоненте

    //other imports..
    import { trigger, state, transition, style, animate } from '@angular/animations';

    @Component({
      selector: 'some-selector',
      templateUrl: 'my-template.html',
      animations: [
        trigger('visibilityChanged', [
          state('shown', style({ opacity: 1 })),
          state('hidden', style({ opacity: 0 })),
          transition('shown => hidden', animate('600ms')),
          transition('hidden => shown', animate('300ms')),
        ])
      ]
    })
    export class MyComponent {
      visiblityState = 'hidden';
      toggle() {
        if (this.visiblityState === 'hidden')
          this.visiblityState = 'shown';
        else
          this.visiblityState = 'hidden';
      }
    }

Ответ 3

Css только решение. Добавьте класс 'step' и [class.show] = "fadeInIfTrue", чтобы заблокировать исчезновение.

CSS:

.step {
  display: none;
  opacity: 0;

  &.show {
    display: block;
    transform: scale(1);
    opacity: 1;
    animation: anim .7s ease-in-out;
  }
}

@keyframes anim {
  0% {
    display: none;
    opacity: 0;
  }
  1% {
    display: block;
    opacity: 0;
    transition: .7s ease-in-out all;
  }
  100% {
    opacity: 1 !important;
  }
}

источник - https://jdsteinbach.com/css/snippet-animate-display-transform/

Ответ 4

после некоторого поиска найденного ответа вам нужно использовать интерфейс адаптера браузера в ng2

import {Component, ViewContainerRef} from 'angular2/core';
import {BrowserDomAdapter} from 'angular2/platform/browser';

export class Filemenu {


   private visible:boolean;
    el:any;
    wrapper:any;
    bar:any;
    viewContainer:ViewContainerRef;
    dom = new BrowserDomAdapter();

    constructor(viewContainer:ViewContainerRef) {
        this.viewContainer = viewContainer;
        this.el = viewContainer.element.nativeElement;
        let bar = this.dom.getElementsByTagName(this.el, 'div')[0];
        $(bar).fadeOut(3000, () => {
            //notify ng2 of the changes so we comply with the framework
             this.dom.setStyle(this.el, 'opacity', '0');
        });
         ...

и насколько здорово это, мы все еще можем использовать jQuery, пока мы не забываем уведомлять рамки наших изменений...

надеюсь, что это поможет другим.

рассматривает

Шон

Ответ 5

 this.userName.valueChanges.debounceTime(100).subscribe(
        (value:string) => {
            console.log('name changed, notified via observable: ', value);
        }
    );