html - 如何在启动 Angular MatBottomSheet 之前加载相机数据
问题描述
我想将二维码扫描器 ( https://github.com/zxing-js/ngx-scanner ) 嵌入到我的 Angular 应用程序的底部工作表中。要获取我在扫描组件(底页)中使用的相机信息,请使用以下代码:
@ViewChild('scanner')
scanner:ZXingScannerComponent;
hasCameras = false;
hasPermission: boolean;
availableDevices: MediaDeviceInfo[];
selectedDevice: MediaDeviceInfo;
ngOnInit() {
this.scanner.camerasFound.subscribe((devices: MediaDeviceInfo[]) => {
this.hasCameras = true;
console.log('Devices: ', devices);
this.availableDevices = devices;
//select camera if only one is available
if (this.availableDevices.length <= 1) {
this.selectedDevice = this.availableDevices[0];
}
else {
//selects the devices's back camera by default
for (const device of devices) {
if (/back|rear|environment/gi.test(device.label)) {
this.scanner.changeDevice(device);
this.selectedDevice = device;
break;
}
}
}
console.log('selected Device: ' + this.selectedDevice);
});}
不幸的是,在渲染底部表格之前,我没有通过订阅获取相机数据,因此扫描仪无法工作,因为当时没有可用的相机数据。
我的扫描组件的 html (底页):
<zxing-scanner #scanner class="scanner" start="true" [device]="selectedDevice" (scanSuccess)="handleQrCodeResult($event)"></zxing-scanner>
调用扫描组件的组件的html:
scan() {
const scanSheet = this.bottomSheet.open(ScanningComponent, {
panelClass: 'bottomSheet'
}); }
有人已经面临这个问题了吗?
更新: 我通过调用this.ChangeDetectorRef.detectChanges();解决了它 这会更新我的相机数据并启动扫描仪。
解决方案
推荐阅读
- java - 这是实施recyclerview的正确方法吗?
- ios - openVPN 网络扩展数据包隧道提供商未启动 VPN 隧道
- javascript - 从 AWS 数据库查询字符串搜索
- instagram - instagram_graph_user_media 和 instagram_graph_user_profile 权限仅适用于测试用户
- kubernetes - 如何将启动参数传递到我的 kubernetes pod 服务
- python-3.x - 带有 gmt 的时间数据与 pandas 转换的格式输入不匹配
- c++ - LNK2005 类 X 已在 Y.obj 中定义
- cmd - 使用从 .TIF 到 .JPG 的“gdal_translate”如何将背景设置为白色?
- r - ggplot facet_grid,给出奇怪情节的代码
- mysql - 使用来自其他表的两个不同 ID 从同一列中获取不同的名称