如何在角度2中更改getUserMedia的回调函数中的变量值

时间:2017-02-27 12:25:48

标签: javascript 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函数中将此参数设置为false。但这是错误的。我无法在回调onSuccess和onFail函数中设置值。我的这两个函数的代码是

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

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

任何人都可以告诉我如何将true值分配给isCamera函数中的onSuccess函数吗? 我收到这个错误: - 未捕获的TypeError:无法设置未定义的属性'isCamera'

2 个答案:

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