Vue
后退捕获及再按一次退出
var ee = new EventEmitter();
var app = new Vue({
el: '#app',
data() {
return {
active: 0,
viewName: 'index'
};
},
computed: {
},
filters: {
},
mounted() {
var that = this;
ee.addListener('set-view', (args) => {
that.setView(args.viewName, args.viewArgs);
});
if (window.history && window.history.pushState) {
// 压入一个历史页面
history.pushState(null, null, document.URL)
// 当手机或者pc后退的时候,会判定是否有历史,如果有,会触发popstate
// 所以默认先压入一个历史页面
window.addEventListener('popstate', this.back, false)
}
/*
this.emitEvent("set-view", {
viewName: 'message'
})
*/
},
methods: {
setView(viewName, viewArgs) {
console.log(viewName);
this.viewName = viewName;
this.viewArgs = viewArgs;
},
back() {
// 当点击后退的时候,会触发该方法
// 并且会自动pop一个历史
var that = this;
if (that.viewName != 'index') {
// 如果不想关闭页面,因为已经pop了,为了下次再按的时候能够触发,需要重新压入一个历史
history.pushState(null, null, document.URL)
that.viewName = "index";
return;
}
// 需要连续两次退出才可退出程序
vant.Toast('再按一次退出应用');
setTimeout(function () {
// 3秒后,重新压入一个历史
history.pushState(null, null, document.URL)
}, 3000);
},
emitEvent(key, args) {
console.log('emitEvent', key, args);
if (args) {
ee.emitEvent(key, [args])
}
else {
ee.emitEvent(key)
}
}
}
});