我已经实现了Instascan(
https://github.com/schmich/instascan
我必须在成功扫描后触发一些操作,并相应地更新组件的视图。
cameras: Array<any> = []
selectedCamera: any
scanner: any
content: string
ngOnInit () {
let vm = this
Instascan.Camera.getCameras().then(function (cameras) {
if (cameras.length > 0) {
vm.cameras.push(...cameras)
} else {
console.error('No cameras found.')
}
}).catch(function (e) {
console.error(e)
})
}
startScan () {
let vm = this
this.scanner = new Instascan.Scanner({
video: this.videoContainer.nativeElement,
backgroundScan: false,
mirror: false
})
this.scanner.addListener('scan', function (content) {
vm.content = content
})
this.selectedCamera = this.cameras[0]
this.scanner.start(this.selectedCamera)
}
在我的模板中,我有一个元素,它只存在于“content”存在的情况下,然后单击“emit”,通过EventEmitter将扫描的内容发送到父组件:
<div *ngIf="content" class="btn" (click)="emitContent()">
PROCEED
</div>
问题是在“scan”事件回调中,“content”中的更改似乎没有应用于我的视图,而且我的“PROCEED”按钮也不可见。一个更奇怪的行为发生了:在我点击屏幕上的任何地方之后,这些更改就会应用到我的视图中。
我怎样才能克服这个问题?