2016-08-13 1 views
5

Ich erhalte diesen Fehler TypeError: Kann die Eigenschaft 'run' von undefined in Subscriber.js nicht lesen: 229 und weiß nicht warum - in ionic beta 10 dieser Code funktioniert gut ... in 11 nicht.NgZone/Angular2/Ionic2 TypeError: Kann die Eigenschaft 'run' von undefined nicht lesen

import {Component, NgZone} from '@angular/core'; 
import {NavController} from 'ionic-angular'; 

declare var io; 

@Component({ 
    templateUrl: 'build/pages/home/home.html' 
})  
export class HomePage { 
    static get parameters() { 
     return [NgZone]; 
    } 

    zone: any; 
    chats: any; 
    chatinp: any; 
    socket: any; 

constructor(public navCtrl: NavController, ngzone) { 
    this.zone = ngzone; 
    this.chats = []; 
    this.chatinp =''; 
    this.socket = io('http://localhost:3000'); 
    this.socket.on('message', (msg) => { 
     this.zone.run(() => { 
      this.chats.push(msg); 
     }); 
    }); 
} 

send(msg) { 
    if(msg != ''){ 
     this.socket.emit('message', msg); 
    } 
    this.chatinp = ''; 
    } 
} 

Antwort

8

Statt es wie folgt Injektion:

static get parameters() { 
    return [NgZone]; 
} 

Warum nicht Sie tun es wie folgt aus:

import { Component, NgZone } from "@angular/core"; 

@Component({ 
    templateUrl:"home.html" 
}) 
export class HomePage { 

    public chats: any; 

    constructor(private zone: NgZone) { 

    this.chats = []; 
    let index: number = 1; 

    // Even though this would work without using Zones, the idea is to simulate 
    // a message from a socket. 
    setInterval(() => { this.addNewChat('Message ' + index++); }, 1000); 
    } 

    private addNewChat(message) { 
    this.zone.run(() => { 
     this.chats.push(message); 
    }); 
    } 
} 

Ich füge private zone: NgZone als Parameter in der constructor und dann kann ich die Methode run() verwenden, indem ich die zone Variable wie folgt verwende:

this.zone.run(() => { 
    // ... your code 
}); 
+1

Sparen Sie meine Zeit! Danke, jetzt klappt es super! – Patrick1870

Verwandte Themen