我正在使用角度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
函数中将此参数设置为false。但这是错误的。我无法在回调onSuccess和onFail函数中设置值。我的这两个函数的代码是
public onSuccess(){
this.isCamera = true;
}
public onFail(){
this.isCamera = false;
}
任何人都可以告诉我如何将true
值分配给isCamera
函数中的onSuccess
函数吗?
我收到这个错误: -
未捕获的TypeError:无法设置未定义的属性'isCamera'
答案 0 :(得分:1)
这里有两件事,你应该真正使用来自mediaDevices界面的getUserMedia,直接在导航器上弃用(https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)
您无法设置它的原因是因为在回调中,&#39;这个&#39;不是你的想法。因此,要么在回调中使用箭头功能,要么将回调绑定到&#39;这个&#39;。
箭头功能:
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));
答案 1 :(得分:0)
回调函数不允许您使用打字稿的this
范围
解决方法就在这里
n.getUserMedia({video: true, audio:true},
function(){ // success
n.isCamera = true;
} ,
function(){ //fail
n.isCamera = false;
}
);