【问题标题】:vue.js 2 routing in vue-materialvue-material 中的 vue.js 2 路由
【发布时间】:2018-02-07 07:02:12
【问题描述】:

我目前正在开发一个使用vue.js 和vue-material 的网页。我做了一个类似的菜单,比如this。

我的目标是,其中一个菜单项将用户重定向到另一个页面。 我试过 official doc 说:

  <md-list-item @click="$refs.sidebar.toggle(); this.$router.push('/company');">
    <md-icon>start</md-icon> <span>Starred</span>
  </md-list-item>

但我收到了一条 vue-warn 消息:

[Vue warn]: Error in event handler for "click": "TypeError: this.$router is undefined"

我尝试了所有版本:$router.push('/company');,router.push('/company');,this.router.push('/company'); 但还是不行。

另一方面,我尝试用router-link 标签包围md-list-item,但效果不佳。

如何定义内联路由(在@click 部分)?

感谢提前回复!

更新:

app.js 中的我的 vue-route 配置:

import VueRouter from 'vue-router'
Vue.use(VueRouter)
...
const routes = [];

const router = new VueRouter({
  routes
})


const app = new Vue({
    el: '#app',
    beforeUpdate: function() {
      console.debug('app rerendering');
      console.debug(this);
    },
    beforeCreate: function() {
      console.debug('app creating');
      console.debug(this);
    },
    router,
});

但问题是一样的...如果我尝试调用这个。$router.push('/company') 我得到了同样的错误:TypeError: this.$router is undefined

【问题讨论】:

标签: javascript routing vue.js vuejs2 vue-material


【解决方案1】:

您的路由器配置似乎没问题。这里的问题是你的@click中的this.,没有必要(你已经使用$refs而没有this:P)。

<md-list-item @click="$refs.sidebar.toggle(); $router.push('/company');">
    <md-icon>start</md-icon> 
    <span>Starred</span>
</md-list-item>

jsfiddle

【讨论】:

  • 哦,谢谢,你是对的!我的最后一个问题,那为什么不重新加载整个页面?它只是将“/公司”添加到网址的末尾。我试图将location.reload(); 添加到点击事件中,但它给了我一个错误;位置没有定义,但是如果我在浏览器控制台中调用它,它运行良好..
  • 在 SPA 中,您几乎不会进行完整的重新加载页面。路由器只会更改正在显示的组件,以将配置中设置的组件与该 url 匹配。您不会(也不应该)注意到完全重新加载,只会更改组件。
【解决方案2】:

如下图这样会更简单更干净::

<md-list-item to="/company">
   <md-icon>start</md-icon> 
   <span>Starred</span>
</md-list-item>

【讨论】:

  • 我对vue不是很了解但是这样能解决问题吗?您能否说明一下这是否会解决问题所问的问题,或者只是一种更清洁的方式来做示例中给出的事情?看起来它会消除错误,但它会做同样的事情吗?
猜你喜欢
  • 2017-04-15
  • 2015-12-23
  • 1970-01-01
  • 2018-03-17
  • 2017-09-24
  • 2017-04-10
  • 2018-12-21
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多