2017-02-27 58 views
0

我對我的應用程序使用了角度2。我用getUserMedia來訪問攝像頭。如果攝像頭可用,則調用成功功能,如果攝像頭不可用,則調用失敗功能。檢查下面的功能。如何在angular 2中更改getUserMedia的回調函數中的變量值

var n = <any>navigator; 
n.getUserMedia = n.getUserMedia || n.webkitGetUserMedia || n.mozGetUserMedia || n.msGetUserMedia; 
n.getUserMedia({video: true, audio:true}, this.onSuccess, this.onFail); 

我有一個變量isCamera : boolean定義。

export class CameraComponent implements OnInit {  
    public isCamera: boolean; 
    ... 
} 

我在onSuccess功能這個變量設置爲true,並在onFail功能錯誤。但是這是給錯誤的。我無法在回調onSuccess和onFail函數中設置值。我的這兩個功能碼

public onSuccess(){ 
    this.isCamera = true; 
} 

public onFail(){ 
    this.isCamera = false; 
} 

誰能告訴如何true價值onSuccess功能分配給isCamera功能? 我收到此錯誤: - 遺漏的類型錯誤:這裏無法設置屬性「isCamera」的未定義

+0

什麼是實際的錯誤? – mvermand

+0

@mvermand未捕獲TypeError:無法設置未定義屬性'isCamera' –

+0

您可以顯示isCamera變量和onSucces函數定義的文件嗎? – mvermand

回答

1

兩件事情,你應該使用getUserMedia從mediaDevices接口,直接在導航已被棄用(https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

你無法設置它的原因是因爲在回調中,'這'不是你認爲的。所以要麼在你的回調中使用箭頭函數,要麼將回調綁定到'this'。

箭功能:

n.getUserMedia({video: true, audio:true},() => this.isCamera = true,() => this.camera = false); 

綁定:

n.getUserMedia({video: true, audio:true}, this.onSuccess.bind(this), this.onFail.bind(this)); 
+0

我已經使用綁定方法,它的工作原理。感謝隊友 –

+0

很酷。請將我的回答標記爲正確,以便其他人也能受益。 – MikeOne

0

回調函數不要讓你使用打字稿的this範圍 的解決辦法是在這裏

n.getUserMedia({video: true, audio:true}, 
    function(){ // success 
     n.isCamera = true; 
    } , 
    function(){ //fail 
     n.isCamera = false; 
    } 
);