To właśnie miałem i działało, był ograniczony do metody progress i wyświetlano poprawnie:

<div [ngStyle]="{'width.%': progress()}"></div>

Teraz muszę dynamicznie stworzyć element:

let myDiv = <HTMLElement>(document.createElement('div'));

Ale nie mogę znaleźć sposobu, aby wiązać metodę postępu do mojego dynamicznie utworzonego elementu.

Kod za pomocą Renderer zgodnie z sugestią @fatueMeFazli, który nie ma wykrywania zmian, więc nie udziela się Gdy dane stają się dostępne, ani słuchaj zmiany metody postępu: https://stackblitz.com/edit/angular-fpyfmn.

Decyzja o utworzeniu elementów DOM dynamicznie pochodzi z potrzeby dołączenia gestu panów za pomocą Hammerjs, który wymaga dołączenia słuchacza więc:

addGestures(elem){
    var hammer = new Gesture(elem);
    hammer.listen();

    hammer.on('pan', (e) => this.Pan(e));
  }

Próbowałem stworzyć wydarzenie publikować / emiter, ale nie mam spustu, aby go opublikować.

9
August 4 czerwiec 2018, 22:10

3 odpowiedzi

Najlepsza odpowiedź

Jak powiedział Trichetriche, nie należy bezpośrednio uzyskać dostęp do domu. W rzeczywistości nie tylko nie jest zalecane, ale nie będzie działać dla dynamicznych zmian, ponieważ już nie jest już uruchomiony wewnątrz strefy kątowej.

Musisz:

  1. Utwórz nowy symbol zastępczy w bieżącym komponencie, który będzie gospodarzem (2)
  2. Utwórz nową dyrektywę, która odpowiada za słuchanie i obsługę zdarzeń, a także renderowanie jakichkolwiek zmian w stylu
  3. Użyj ComponentFactoryResolver do dynamicznej wstrzykiwania (2) do (1)

Sprawdź więcej informacji na temat strony kątowej Dynamiczne obciążenie komponentu Kątowe, w którym prezentują bieganie Przykład czegoś podobnego do tego, czego potrzebujesz

1
WebDever 13 czerwiec 2018, 02:28
constructor(public el: ElementRef, public renderer: Renderer){
    this.myDiv = <HTMLElement>(document.createElement('div'));
    renderer.setElementStyle(this.myDiv , 'width', this.progress()+'%');
}
2
Fateme Fazli 4 czerwiec 2018, 19:32

Nie powinieneś poradzić sobie z domem zmienić (i dodanie elementu jest).

Nawet podczas korzystania z renderowania jest to coś, czego chcesz uniknąć.

To, co sugerował, jest użycie zdarzenia i wiązania danych na twardym elemencie, jak ty pierwszy raz.

A jeśli naprawdę musisz stworzyć div z jakiegokolwiek powodów, proszę wyjaśnić nam, co chcesz osiągnąć, ponieważ jest prawdopodobnie rozwiązanie dla Ciebie, które nie wiąże się z dotknięciem domu samego siebie.

1
user4676340user4676340 7 czerwiec 2018, 06:51