【问题标题】:Vue component opened in Ionic Vue Modal doesn't have $route and $router在 Ionic Vue Modal 中打开的 Vue 组件没有 $route 和 $router
【发布时间】:2021-06-01 10:04:44
【问题描述】:

我正在使用 Vue Ionic 创建应用程序,并尝试通过 ionic 提供的模态控制器更改页面,如下面的代码。

const modal = await this.$ionic.modalController.create({
  component: NewPageComponent
})
modal.present()

然后NewPageComponent<ion-modal></ion-modal> 中打开没有问题。 但是当我尝试在 NewPageComponent 中确认 $route 和 $router 时,NewPageComponent 没有这些。

新页面组件

export default {
  created () {
    console.log(this.$route) // undefined
    console.log(this.$router) // undefined
  }
}

<ion-modal></ion-modal> 中打开的Vue 组件似乎没有$route$router。 但其他人有这些没有问题。 例如,我可以在App.vue 中看到$route$router

App.vue

<template>
  <ion-app>
    <v-app>
      <span>App</span>
    </v-app>
  <ion-app>
</template>

<script>
export default {
  created () {
    console.log(this.$route) // this.$route exists
    console.log(this.$router) // this.$router exists
  }
}
</script>

当然我已经在main.js注册了路由器

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import Ionic from '@ionic/vue'
import './registerServiceWorker'
import './plugins/ionic.js'


Vue.use(Ionic)
Vue.config.productionTip = false

new Vue({
  router, // I have set router like this
  render: h => h(App)
}).$mount('#app')

有什么方法可以让在&lt;ion-modal&gt;&lt;/ion-modal&gt; 中打开的 Vue 组件像 NewPageComponent 一样有$route$router

【问题讨论】:

  • 不确定您从哪里获得此代码,但全都错了。我建议您从 ionic starter 模板和有关创建模态的文档开始

标签: vue.js ionic-framework vue-component vue-router


【解决方案1】:

Ionic 内部使用另一个Vue 实例。当您创建新模式时,它被放置在此实例中,而没有在主应用程序中注册的路由器。我建议您使用事件总线模式在组件之间进行通信。很简单:

EventBus.js

import Vue from 'vue'
export const EventBus = new Vue()

然后在主应用中你可以监听自定义事件:

App.vue

import {EventBus} from './EventBus.js'
//...
created() {
  EventBus.$on('change-route', this.handleRouteChange)
  EventBus.$on('change-params', this.handleParamsChange)
},
beforeDestroy() {
  EventBus.$off('change-route', this.handleRouteChange)
  EventBus.$off('change-params', this.handleParamsChange)
},
methods: {
  handleRouteChange(page) {
    // here you can normally access this.$router
    this.$router.push(page)
  },
  handleParamsChange(params) {
    this.$router.push({params:params})
  }
},

NewPageComponent.vue

import {EventBus} from './EventBus.js'
//...
methods: {
  changePage() {
    EventBus.$emit('change-page', '/new-page')

    // If you want to change page named route with params:
    // EventBus.$emit('change-page', {name:'product', params: {id: 10}})
  },
  updateParams() {
    EventBus.$emit('change-params', {id: 1010})
  } 
}

【讨论】:

  • 非常感谢。当我想从NewPageComponent 更改页面时,这很有效。有没有从NewPageComponent 获取$route.params 等参数的好方法?
  • @kooh 看看我的答案更新。如果你想获取参数,你可以通过 props 将它传递给模态组件。
  • 我明白了。正如您所建议的那样,使用 props 看起来不错。感谢您非常友好的解释。
猜你喜欢
  • 2023-03-24
  • 2019-02-09
  • 2018-05-20
  • 2017-07-22
  • 2018-12-17
  • 2017-01-22
  • 2023-04-04
  • 2017-03-14
  • 2020-03-07
相关资源
最近更新 更多