2017-06-22 7 views
1

Ich habe ein Problem mit Ionic 2 vor allem mit eckigen. Mein Problem ist, dass ich eine Variable namens "isConnected" habe und wenn ich von einer internen Funktion einer Funktion zugreifen möchte, kann ich nicht. Es sagt, kann Property of undefined nicht definieren. Wie greife ich von einer internen Funktion auf meine Variable isConnected zu? Ich habe versucht mit: BleProvider.prototype.isConnected, aber es funktioniert nicht. Kann mir jemand erklären, wie das geht?Ionic 2 öffentliche Variable und interne Funktion

export class BleProvider { 

public isConnected = false; 
public mDevice; 

constructor(public http: Http) {} 

connectToDevice(device){ 
    console.log('Connecting to device...'); 

    this.mDevice = device; 
    setTimeout(
    ble.connectToDevice(
    device, 
    onConnected, 
    onDisconnected, 
    onConnectError), 
    500); 

    function onConnected(device) { 
    console.log("Connected to device: " + device.name); 
    this.isConnected = true; 
    console.log("isConnected variable status: " + this.isConnected); 
    } 
    function onDisconnected(device) { 
    console.log('Disconnected from device: ' + device.name); 
    } 
    function onConnectError(error) { 
    console.log('Connect error: ' + error); 
    } 
} 

Antwort

0

Sie sollten arrow functions wie folgt verwenden:

export class BleProvider { 

    public isConnected = false; 
    public mDevice; 

    constructor(public http: Http) { } 

    connectToDevice(device) { 
     console.log('Connecting to device...'); 

     this.mDevice = device; 

     // Create the callbacks by using arrow functions() => {...} 
     let onConnected = (device) => { 
       console.log("Connected to device: " + device.name); 
       this.isConnected = true; 
       console.log("isConnected variable status: " + this.isConnected); 
      }, 
      onDisconnected = (device) => { 
       console.log('Disconnected from device: ' + device.name); 
      }, 
      onConnectError = (error) => { 
       console.log('Connect error: ' + error); 
      } 

     // You can also use an arrow function in the setTimeout! :) 
     setTimeout(() => { 
      ble.connectToDevice(device, onConnected, onDisconnected, onConnectError); 
     }, 500); 

    } 
} 

Wenn eine reguläre Funktion, die this Schlüsselwort verweist auf die Funktion selbst, aber wenn Funktionen Pfeil mit, die this wird Eigenschaft nicht überschrieben und verweist immer noch auf die Komponenteninstanz (wo Sie die isConnected-Eigenschaft definiert haben).

+1

Vielen Dank an Sie, Sie haben mir wirklich geholfen und meine Meinung geklärt. Vielen Dank – Junior

+0

Vielleicht können Sie diese Frage auch beantworten :). In der gleichen Situation, wenn ich eine externe Funktion nach 'this.isConnected = true aufrufen will;' wie 'this.myFunction();' (myFunction wird außerhalb von 'connectToDevice()' deklariert, heißt es: this.myFunction() ist keine Funktion. – Junior