Vue无法监听Cordova事件

Bro*_*zka 5 javascript cordova vue.js

我正在尝试构建一个混合应用程序Cordova。我使用 VueJS 进行路由和 AJAX 请求。

不幸的是我无法捕捉到一些事件Cordova。甚至该deviceReady活动也不起作用。
这是我的文件:

require('./bootstrap');


var Vue = require('vue');
var VueRouter = require('vue-router');

Vue.use(VueRouter);

// Some components
Vue.component('test', require('./Vue/components/test.vue'));
Vue.component('mainnav', require('./Vue/partials/mainnav.vue'));

// Route-components
const Home = Vue.component('home', require('./Vue/pages/home.vue'));
const Login = Vue.component('login', require('./Vue/pages/auth/login.vue'));
const Register = Vue.component('register', require('./Vue/pages/auth/register.vue'));
const notFound = Vue.component('notFound', require('./Vue/pages/404.vue'));

// the routes
const routes = [
    { path: '', component: Home },
    { path: '/', component: Home },
    { path: '/login', component: Login },
    { path: '/register', component: Register },
    { path: '*', component: notFound }
];

const router = new VueRouter({
    mode: 'history',
    routes // short for routes: routes
});

const vueApp = new Vue({
    router,
    mounted: function(){
        //alert('VueJS is ready!');
        document.addEventListener('deviceReady', this.onDeviceReady, false);
    },
    methods: {
        onDeviceReady: function() {
            alert('Device is ready!');
        }
    }
}).$mount('#app');
Run Code Online (Sandbox Code Playgroud)

也许我没有收到消息,因为设备在 Vue 准备好之前就准备好了。但我该如何处理这个问题呢?

我可以访问其他选项,例如vibration-plugin来自 Vueroot-instance和 vue 组件的选项:

export default {
    data() {
        return {
            vibrateDuration: 5000,
        };
    },
    methods: {
        letsVibrate: function(){
            navigator.vibrate(this.vibrateDuration);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

知道如何在 Vue 中捕获设备就绪事件吗?

Chr*_*ois 4

这可能是并发问题。尝试设置一些简单的信号量锁,仅当两者都打开时才触发功能(未经测试,但您明白了):

let deviceReady = false
let vueMounted = false

const vueApp = new Vue({
  router,
  mounted: function(){
    vueMounted = true
    if (deviceReady) vueApp.everythingReady()
  },
  methods: {
    everythingReady: function() {
        alert('Vue is mounted and everything is ready')
    }
  }
}).$mount('#app')

document.addEventListener('deviceReady', () => {
  deviceReady = true
  if (vueMounted) vueApp.everythingReady()
}, false)
Run Code Online (Sandbox Code Playgroud)