2017-11-03 19 views
1

Ich habe eine Klasse, die auf ein Ereignis wartet. Wenn dieses Ereignis eintritt, möchte ich die Daten, die mit der Even kommen, auf das Array übertragen und anzeigen. Das ist meine Klasse:Ionic3: kann nicht auf Klasseneigenschaft von innerhalb von Ereignissen zugreifen

export class randomClass { 

    someArray:Array<string>; 

    constructor(public navCtrl: NavController, 
       public navParams: NavParams, 
       public events: Events) { 

    events.subscribe('event', 
     (data) => { 
     //some random code 
     this.someArray.push(data); //this fails 
     } 
    ) 
    } 

Der Fehler, ich erhalte, ist: Typeerror: nicht definiert ist kein Objekt (Bewertung ‚_this.communication.push‘)

Ich denke, das ist trivial, aber kann Ich finde die Antwort nirgends.

Antwort

1

Ok. Das Problem war, dass ich die Eigenschaft mit einem leeren Array initialisieren musste (kann jemand erklären warum?). Das Folgende löste das Problem.

communication:Array<string> = []; 
1

The problem was that I had to initialize the property with an empty array (can somebody explain why?)

Wenn Sie das tun

someArray: Array<string>; 

Sie erklärt nur eine Eigenschaft namens someArray und Einstellung seiner Art ein Array von strings, sein, aber Sie diese Eigenschaft nicht initialisiert, so wird zunächst someArrayundefined sein.

Also, wenn Sie versuchen, dies zu tun:

this.someArray.push(data); 

seit this.someArray nicht definiert ist, Sie versuchen, die push Methode von undefined zu nennen, die es nicht gibt (und das ist, warum der Fehler so etwas wie sagt TypeError: undefined ist kein Objekt).

Genau wie Sie gesagt haben, ist die Lösung someArray mit einem leeren Array zu initialisieren. Auf diese Weise können Sie die Methode push aufrufen, da sie in jedem Objekt definiert ist, dessen Typ Array ist.

someArray: Array<string> = []; 
+1

Große Erklärung. Vielen Dank! – Mike

+0

Froh, das @Mike zu hören :) – sebaferreras

0

Das Problem ist, wenn transpile diesen Code in JavaScript, wird der Wert der Variablen someArray zu undefinierten gleich ist. Das funktioniert wie transpiler. Sie können Daten nicht in eine undefinierte Variable verschieben. Weil es kein Array ist. Wenn Sie es als someArray:Array<string> = [] initialisieren, wird es in eine var someArray = [] transpiliert. Jetzt können Sie die Daten in das Array schieben.

Verwandte Themen