2016-01-30 16 views
95

Bileşenin yeniden oluşturulmasında Angular 2'de nasıl zorlanır? Redux ile çalışmak için hata ayıklama amacıyla, bileşenini yeniden görüntülemeye zorlamak isterim, bu mümkün mü?Bileşenin yeniden oluşturulmasında Angular 2'de nasıl zorlanır?

constructor(private zone:NgZone) { 
    // enable to for time travel 
    this.appStore.subscribe((state) => { 
     this.zone.run(() => { 
      console.log('enabled time travel'); 
     }); 
    }); 

çalışan zone.run

+0

"Yeniden oluşturma" ile ne demek istiyorsun? Bağlamaları güncelle? –

+0

Yeniden oluşturmayı zorlamanız için neden hızlı bir soru? –

+4

Muhtemel [Tetikleme Angular2 değişiklik algılamayı el ile tetikleniyor] (http://stackoverflow.com/questions/34827334/triggering-angular2-change-detection-manually) – blo0p3r

cevap

138

Rendering değişimi algılama sonra olur yeniden işlemek için bileşeni zorlar:

+3

hepsini dene bunlardan hala ios çalışmıyor, üzgün – vuhung3990

+1

Angular2 son sürümü için ChangeDetectorRef üzerinde herhangi bir çalışma kodu? Şu anda, bir kullanıcının yeni bir kullanıcı oluşturma isteğinin ardından ve yeni nesneyi mevcut eski kullanıcı listesine (görünümde yinelemek için kullanılır) iterek başarının ardından güncelleştirmenin güncellenmediği bir durumla karşı karşıyayım. Oldukça garip ki, '' ng2'de çalışmayan bir güncelleme ile karşı karşıya olduğum ilk sefer bu. Değişiklik saptama stratejisi varsayılantır, bu yüzden değişiklik tespit stratejisiyle uğraşmadığımı biliyorum. – Gary

+0

@Gary, yeni bir soru yayınlamalı ve bileşeninizi ve servis kodunuzu eklemelisiniz (ideal olarak, sorunu gösteren minimum bir plunker ekleyin). Gördüğüm yaygın bir sorun POST geri aramada uygun 'bu' bağlamını kullanmıyor. –

33

tx, ben gerekli geçici çözümü buldum. DOM yayılır olsun değişmiştir bileşen özellik değerleri (ve ardından tarayıcı görünümünde bu değişiklikleri oluşturulacaktır), böylece değişim algılama zorlamak için, burada bazı seçenekler şunlardır:

  • ApplicationRef.tick() - Eğik 1'ler $rootScope.$digest() benzer -
  • NgZone.run(callback) tam bileşen ağacını kontrol edin - $rootScope.$apply(callback)'a benzer - yani, Angular 2 bölgesinde geri arama işlevini değerlendirin. Sanırım, ama emin değilim, bu geri çağırma işlevini yürüttükten sonra tam bileşen ağacını kontrol etmeyi bitiriyor.
  • ChangeDetectorRef.detectChanges()
  • - $scope.$digest() benzer - yani sen ApplicationRef, NgZone veya ChangeDetectorRef bileşeniniz enjekte sadece bu bileşeni ve bunun çocukları

kontrol edin.

Özel senaryonuz için, yalnızca tek bir bileşen değiştiyse son seçeneği öneririm.

+3

Bu bağlamda appStore nedir - hangi tür bir değişken ve türü? gözlemlenebilir gibi görünüyor ... ama benim gözlemlenebilir bir düğme tıklaması ile yenilemek istiyorum bileşeninin içinde ... ve ebeveyn/geçerli konumdan bir çocuk bileşeni yöntem/değişken erişmeyi bilmiyorum –

İlgili konular