2017-06-22 6 views
1

特に角張ったIonic 2に問題があります。私の問題は、 "isConnected"という名前の変数があり、関数の内部関数からアクセスしたいときはできません。それは未定義の財産を定義することはできません。変数isConnectedに内部関数からアクセスするにはどうすればよいですか?私はこれを試しました:BleProvider.prototype.isConnectedしかし、それは動作していません。誰かが私にこれがどのように機能するのかを説明することができますか?Ionic 2公的変数と内部関数

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); 

    } 
} 

通常の関数を使用する場合は、thisキーワードは関数自体を参照していますが、矢印機能を使用した場合、thisプロパティは上書きされません:あなたはこのように、arrow functionsを使用する必要があります

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); 
    } 
} 

答えて

0

isConnectedプロパティを定義した)コンポーネントインスタンスを参照しています。

+1

多くのおかげで、あなたは本当に私を助け、ここで私の心を明確にしました。ありがとうございました – Junior

+0

多分この質問に答えることができます:)。同じ状況で、 'this.isConnected = true;の後に' this.myFunction(); 'のような外部関数を呼びたい場合(myFunctionは' connectToDevice() 'の外で宣言されています。this.myFunction()関数ではありません。 – Junior

関連する問題