2017-08-03 28 views
6

PrimeNG bileşenlerini kullanan bir Açısal 2 uygulamasına sahibim.Açısal: otomatik tamamlama alanı, bir öğeyi kaldırdıktan sonra odağı değiştirir

UI the documentation den benzer çoklu seçim (p-autoComplete) ile tamamlama bileşene sahip:

<p-autoComplete [(ngModel)]="countries" 
       [suggestions]="filteredCountriesMultiple" 
       (completeMethod)="filterCountryMultiple($event)" 
       [minLength]="1" 
       placeholder="Countries" 
       field="name" 
       [multiple]="true"> 
</p-autoComplete> 

tek fark, zaman durumda giriş alanı boyutları ve kaydırma çubuğu sabit olmasıdır.

Sorun:

Ben girdi alanın alt odağı taşır otomatik tamamlama listesinden ortasından bir öğe kaldırmak her zaman. Bu şuna benzer:

enter image description here

Bu çıkarılmalıdır bazı alanlar vardır, özellikle kullanıcılar açısından çok can sıkıcı.

Soru: Bir öğeyi kaldırdıktan sonra aynı konumda kalmak için kaydırma nasıl zorlanır?

çoğaltmak için:

daha spesifik olmak gerekirse, tarayıcı konsolunu kullanarak documentation pageui-autocomplete-multiple-container.ui-inputtext içine css sınıfa doğrudan sonraki css

max-width: 150px; 
max-height: 100px; 
overflow-y: auto; 

ekleyerek sorunu yeniden.

onUnselect(event: any) { 
    document.querySelector("div.my-input-class").scrollTop 
} 

GÜNCELLEME 2: Böyle kod kullanarak bileşeninde onUnselect yöntemi kurarak kaydirac pozisyonunu başardı : GÜNCELLEME

Ben çalışması için yönetilen

Çözüm, onUnselect ve onFocus olay işleyicilerinin birleşimidir. İlk önce

. Son kaydırma çubuğunu onUnselect numaralı çağrı alanına kaydediyorum.

İkincisi. Bu değeri onFocus çağrısı sırasında belirtilen öğeye ayarlıyorum.

karşılık gelen kod şuna benzer:

scrollPosition: number = 0; 

onUnselect(event: any) { 
    let input = document.querySelector("div.my-input-class"); 
    this.scrollPosition = input.scrollTop; 
} 

onFocus(event: any) { 
    let input = document.querySelector("div.my-input-class"); 
    input.scrollTop = this.scrollPosition; 
} 

O iyi çalışıyor ve muhtemelen bu son çözüm olacaktır. Bununla birlikte, bundan hoşlanmıyorum. PrimeNG çalışanlarının bileşenlerinde böyle bir işlevselliği yerleştirmeleri daha iyi olurdu. Benim için garip neden kutudan çıkmıyor?

Daha iyi bir çözüm bulursanız lütfen öneriniz.

Aşağıda aynı işlemek için onFocus olayı kullanıyor olmalıdır
+0

çoğaltmak bir plunker oluşturabilirim? – Aravind

+0

İmleç atlama davranışına neden oluyor gibi görünüyor. Bu yüzden bir öğe kaldırıldığında imleci devre dışı bırakmayı (öğeyi devre dışı bırakarak) veya öğeyi kaldırmadan önce odağı başka bir öğeye dönüştürmeyi denemenizi öneririz. Kullanmakta olduğunuz kontrolün bunu yapmasına izin verip vermeyeceğini bilmiyorum ama bir bilgisayara erişene kadar test edemiyorum – Sal

+0

Ayrıca, gördüğüm en iyi yapılandırılmış sorulardan biri de bu. Sorununuzu anlamak/anlamak çok kolaydı. Zaman ve çaba harcadığın için teşekkürler! – Sal

cevap

1

,

<p-autoComplete [(ngModel)]="countries" 
       [suggestions]="filteredCountriesMultiple"      
       (completeMethod)="filterCountryMultiple($event)" 
       styleClass="width12" (onFocus)="onFocus($event)"> 

    .... 


onFocus(event){ 
     window.scrollTo(0, 0); 

} 

LIVE DEMO

+1

Yanlış bir şey yapıyorum olabilir, ama denedim ve işe yaramıyor. Ve demoda herhangi bir kaydırma çubuğu yok, dolayısıyla kontrol etmenin bir yolu yok. Neyse, pencerenin özellik çubuğunu belirli sayfa öğesinin içinde kaydırma çubuğunda nasıl ayarlayacağını anlamadım? Benim durumumda, kaydırıcının konumunu, sayfadan değil, giriş elemanının içine yerleştirmem gerekiyor. –

+0

@OleksandrShpota pencere boyutunu ve testini azaltır. – Aravind

+0

Şimdi ne demek istediğimi anladım. Soru tamamen açık olmayabilir - Pencereden gelen değil, giriş elemanındaki kaydırma çubuğunu kontrol etmem gerekiyor. Önerdiğiniz kod, pencerenin kaydırıcı konumunu değiştirir. –

1
onUnselect(event: any) { 
    // get index of the removed element 
    // get total options count 
    // get height of the element that contains the options 
    // divide the height by number of options 
    // set scroll potion to the result of division multiplied by the index 
    document.querySelector('.ui-autocomplete-multiple-container.ui-inputtext').scrollTop = calculatedValue; 
} 
+0

Kaydırma pozisyonunu tam olarak nasıl ayarlamanızı öneriyorsunuz? Öğeyi alıyorum ve 'scrollTop'unu ayarladım ve hesaplamalar olmadan bile çalışmaz. Diyelim ki, elemanın 'scrollTop 'öğesini 100 olarak ayarladım - kaydırma daha önce olduğu gibi dibe atlar. –

+0

onaylı yanıtı kontrol edin –

+0

Bu benim yorumumda anlattığım tam olarak budur, bu şekilde denedim ve işe yaramıyor :( –

İlgili konular