原本的写法:
window.addEventListener("deviceorientation", this.watch); window.removeEventListener("deviceorientation", this.watch);
这样在this.watch中无法调用正确的this对象
通过this.watch.bind(this);传递了this后,removeEventListener又失效了。
后查得,可以使用Renderer2提供的listen方法:
import { Renderer2 } from '@angular/core'; constructor( private renderer: Renderer2, ) {} start() { this.listenFunc = this.renderer.listen("window", "deviceorientation", (e) => { console.log(e.alpha, e.beta, e.gamma); }); } stop() { this.listenFunc(); }
调用返回函数listenFunc,即可取消监听。