0

Angular2 ile bir telefon uygulaması yapıyorum. Bir onay iletişim kutusu göstermek ve öğeleri angular2 görünümünden güncellemek için başarı geri çağırma göstermek istiyorum. Bunu yaptığımda hiçbir şey hemen olmaz, ancak sayfadaki diğer modeli güncellediğimde (açısal ile bağlantılı olan) güncellemem güncellenir.Açısal 2 öğe, telefon görüşmesi bildirim iletişim kutusundan değiştirildiğinde güncellenmiyor

Onay iletişim kutusu için phonegap eklentisini kullanıyorum: cordova-plugin-dialogs ve şu yöntem çağrılıyor: navigator.notification.confirm(...). İşte

benim Bileşen benim tam kodu:

AboutComponent = ng.core 
    .Component({ 
     selector: 'rl-about', 
     templateUrl: 'app/components/about/view.html', 
     directives: [TopBarComponent, ng.router.ROUTER_DIRECTIVES] 
    }) 
    .Class({ 
     constructor: [Config, function(config) { 
      this.config = config; 

      this.title = "About"; 
      this.top_bar_left = "Back"; 
     }], 
     /** 
     * Back btn 
     */ 
     topBarLeftClick: function(){ 
      window.history.back(); 
     }, 
     changeMessage: function(){ 
      this.message = "Test"; 
      var self = this; 
      navigator.notification.confirm(
       "Delete this?", 
       function(buttonIndex) { 
        if(buttonIndex == 1) { //1 = Ok 
         console.log("Message before: " + self.message) //self.message has the old value ("Test") 
         self.message = "Deleted"; 
         console.log("Message after: " + self.message) //self.message has the new value ("Deleted"), but nothing changed on view.html 
        } 
       }, 
       "Confirm Delete", 
       ["Delete", "Cancel"] 
      ); 
     } 
    }); 

Ve html şuna benzer:

<div class="page-wrapper"> 
    <rl-top-bar [title]="title" [top_bar_left]="top_bar_left" (topBarLeftClick)="topBarLeftClick()" ></rl-top-bar> 
    <div class="about-info-wrapper"> 
     <input type="text" [(ngModel)]="other_model" id="itemtoclick"/> 
     {{message}} 
     <div (click)="changeMessage()">click here</div> 
    </div> 
</div> 

{{message}}navigator.notification.confirm eylemci çağrıldığında güncellenmiyorsa ama eğer güncellenir Örneğin,

Açısal modele bağlı input kutuda tıklatırım Çalıştığım bir hack geri arama çağrıldığında javascript'ten bir şey tıklamaktır. Bunun gibi: window.document.getElementById('itemtoclick').click()

.bind(this)navigator.notification.confirm(...) eklemeye çalışıyorum ama hata atıyor.

navigator.notification.confirm numaralı telefonu aramadan önce bir değişkeni this kaydetmeye çalışıyorum aynı sonuç. geri arama yöntemini kullanırsanız, aynı sonuç

.

Her nasılsa, bu iç çağrıya başvuruda bulunabildiğim için okuyabildiğim ve güncelleştirilebildiğim, ancak açısal2, görünümü güncelleştirmek için bir değişiklik yaptığımı bilmiyor.

Ayrıca bu sorun yalnızca mobil cihazlarda çalışıyor, tarayıcıda çalıştırmaya çalışırsam (chrome) çalışıyor. Ben android için .apk dosyası oluşturmak için phonegap kurmak kullanın. Ancak, canlı test için Phonegap mobil uygulamasını kullanırsam sorun da görünür.

Böyle bir saldırı içermeyen bir çözüm olup olmadığını bilmek istiyorum.

Düzenleme

Bu ben PhoneGap CLI sorun Android ve hem de bulunmaktadır

kullanıyorum iOS için PhoneGap yapı

kullanıyorum Android için benim ilk PhoneGap uygulaması

olduğunu iOS.

See here Ayrıca ben onDeviceReady için this kullanmayan değiştirmek ve sorun hala burada:

Edit 1 Nis 2016

daha iyi sorunu açıklamak için bir video oluşturdu. İşte benim ana.js kodu:

var phonegapApp = { 
    initialize: function() { 
     phonegapApp.bindEvents(); 
    }, 
    bindEvents: function() { 
     document.addEventListener('deviceready', phonegapApp.onDeviceReady, false); 
    }, 
    onDeviceReady: function() { 
     console.log("phonegapApp onDeviceReady"); 
     ng.platform.browser.bootstrap(AppComponent,[ 
      ng.http.HTTP_PROVIDERS, 
      ng.router.ROUTER_PROVIDERS, 
      new ng.core.Provider(ng.router.LocationStrategy, {useClass: ng.router.HashLocationStrategy}) 
     ]); 
    } 
}; 

Ve index.html den

benim body altındaki phonegapApp.initialize(); diyoruz.

+0

Nasıl PhoneGap bu ilişkilidir? – JesseMonroy650

+0

@ JesseMonroy650 bir telefongap eklentisi kullandığım için: "cordova eklenti diyalogları" ve sadece bu eklentiyi kullandığımda bu problemi görüyorum. Ve sorun sadece mobilde (tarayıcıda değil). Yani bu eklenti ile ilgilidir. –

+0

Bu önemli bilgiler yayınınızda değil. Önemli bilgileri çıkarırsanız, insanların sorununuzu çözmesini nasıl beklersiniz? – JesseMonroy650

cevap

0

Bu sözcük kullanmak edebilmek için bir ok işlevi kullanmak için deneyebilirsiniz:

this.message = "Test"; 
navigator.notification.confirm(
    "Delete this?", 
    (buttonIndex) => { 
    if(buttonIndex == 1) { //1 = Ok 
     this.message = "Deleted"; 
    } 
    }, 
    "Confirm Delete", 
    ["Delete", "Cancel"] 
); 

ok fonksiyonlarının bu sözcük hakkında daha fazla ipucu için bu bağlantıya bakın:

Düzenleme

Eğer ES5 kullanırsanız, deneyebilirsiniz:

this.message = "Test"; 
var self = this; 
navigator.notification.confirm(
    "Delete this?", 
    function(buttonIndex) { 
    if(buttonIndex == 1) { //1 = Ok 
     self.message = "Deleted"; 
    } 
    }, 
    "Confirm Delete", 
    ["Delete", "Cancel"] 
); 
+0

Sade javascript kullanıyorum. Bu yöntemi kullanmaya çalışırsam, hatayla karşılaşıyorum: 'Beklenmeyen belirteç: operatör (>). –

+0

Evet, bir ES6 özelliği. Bu anahtar kelimeyi geri arama dışında kaydetmeyi deneyebilirsiniz. Cevabımı buna göre güncelledim ... –

+0

Hala bu şekilde çalışmıyor. Bu kodun geri çağrısını koydum: 'console.log (" Mesaj öncesi: "+ self.message); self.message = "Silindi"; console.log ("Mesaj sonrası:" + self.message); 've güncellendi tamam (ikinci konsol.log, Silindi mesajıyla birlikte). Ancak görünüm yeni mesajı görüntülemek için yenilenmiyor. Sayfadaki başka bir şeyle etkileşime girmeden değiştirirseniz güncellenir. –