2017-02-27 62 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; 
    } 
);