后退捕获及再按一次退出

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