2017-04-13 24 views
9

Benim bir yan projesi için, yeni mesajın aşağıya eklendiği bir sohbet akışı uygulamak istiyorum ve pencereler en son mesajı görüntülemek için aşağı kaydırmalı.Renderer, inverElementMethod işlevi için renderer2 için bir alternatif olarak kabul edilmez mi?

Bunu yapmak için, son iletiyi (en son) bulmak için ViewChildren bileşenini kullanmayı seçtim ve nativeElement numaralı telefondan scrollIntoView'u kullanın. nativeElement.scrollIntoView()nativeElement.scrollIntoView() DOM API'sine doğrudan erişerek yöntemi çağırmamak için. renderer.invokeElementMethod(nativeElement, 'scrollIntoView')'u kullanmam gerekeceğine inanıyorum.

Sorun rendererrenderer2 lehine kullanım dışı kalmıştır ve ben renderer2 yöntemin invokeElementMethod için alternatif bulamıyorum.

Soru şu ki, sadece bunu yapan renderer2'da kaçırdığım bir yöntem var mı? ya da şimdi elementi çağırmak için yeni bir yol var mı?

+1

https://github.com/angular/angular/issues/15008#issuecomment-285141070 Ben fakir olarak 'Renderer2' kullanarak önleyeceğini – yurzui

cevap

11

Renderer2selectRootElement yöntemini kullanabilirsiniz. Örneğin

: domelementid olduğunu

constructor(private renderer: Renderer2) {} 

this.renderer.selectRootElement('#domElementId').scrollIntoView() 

, id = 'domelementid' sizin html

+0

ünite testi için belgelendi ... test etmek için '' kendi işleyicinizi yazmayı bitirdim – DAG

+0

Bu, Renderer2 ile benim için çalışmadı. Öğe seçildi, ancak 'scrollIntoView' çağırmak sadece bu bölümü domtan kaldırdı! Ben doğrudan onu – Ryan

+0

çağırmak için ViewChild yöntemine dönmek zorunda kaldım, bunun 10 tane nasıl olduğunu bilmiyorum. selectRootElement seçilen öğenin tüm çocuk düğümlerini siler. Sadece kök açısal elemanı seçmek için kullanılır ve belirli öğeleri seçmek için kullanılmaz Bkz. Https://github.com/angular/angular/issues/19554#issuecomment-341848166 – Ryan

-1

en bir exapmple tarafından bu cevap vereyim: durumunda

biz var şu şekilde görün:

İçinde ngAfterViewInit(), böyle odaklanmış verilmesi gereken:

this.renderer.selectRootElement("inp1").scrollIntoView(); 
+0

@Brian Girdileriniz açığız! Sizin için çalışan kodu bir cevap olarak gönderir misiniz, böylece başkaları yararlanabilir? – xameeramir