【问题标题】:Is it possible to use vue-router without a component in vue 2?是否可以在 vue 2 中使用没有组件的 vue-router?
【发布时间】:2018-05-20 13:50:22
【问题描述】:

我有一个非常简单的页面,只有几行代码,我想在没有 vue-component 的情况下使用 vue-router。

我想在root之后得到string "my-search-query"

www.example.com/my-search-query

并在我的主 Vue() 对象中使用它。这可能吗?

谢谢!

【问题讨论】:

  • 如果您只想使用 vue-router,请使用 window.location.pathname
  • @tom_h 当路径更改为“my-other-search-query”时如何通知我?抱歉新手问题,我刚开始学习vue。

标签: vue.js vuejs2 vue-component vue-router


【解决方案1】:

可以在没有vue-component 的情况下使用vue-router,并且仍然会收到有关主Vue() 应用程序对象中路径更改的通知:

您可以像这样从www.example.com/#/my-search-query 获取"my-search-query" 字符串:

const router = new VueRouter({
  routes: [
    { path: '/:question' }
  ]
})

const app = new Vue({
  el: '#app',
  router,
  watch: {
    '$route.params.question': function(newVal, oldVal) {
      alert(newVal === 'my-search-query');
    }
 }
});

感谢@samayo 为我指明了正确的方向!

【讨论】:

  • 我在组件总是相同的情况下使用了这种方法,因此路由器视图似乎是多余的,但我很快发现自己处于一个奇怪的地方,试图手动处理所有观察者。我认为将来我会使用 并尝试使用路由本身中的props 选项连接查询/参数传递。 (router.vuejs.org/guide/essentials/…)
【解决方案2】:

由于路由器是您的视图模型实例的一部分,您可以创建一个计算函数来返回路由器的路径值。例如,您可以执行以下操作:

data: function() {
    router: new VueRouter()
},
computed: function() {
    routerPath: function() {
        return this.router.currentRoute.path;
    }
},
watch: function() {
    routerPath: function(val) {
        switch(val) {
            case '/':
                // @TODO: logic for home
                break;
            case '/path1':
                var query = this.router.currentRoute.query;
                // @TODO: logic form query params
                break;
        }
    }
}

这样,路由器将为您管理历史记录,但您不必将代码分成组件。例如,我有一个非常小的页面,只想将所有内容放入同一个 viewModel 中,而不是将所有内容分解为组件。

【讨论】:

    【解决方案3】:

    正如tom_h 所说,如果您只想获取路径名,可以使用window.location.pathname。如果您想在此路径名更改时收到通知,请先将其初始化为您的 data(){} 对象,并将其视为:

    data () {
      return {
        path: window.location.pathname
      }
    },
    
    watch: {
      path (newpath, oldpath) {
        alert('location path just changed from ' + newpath + ' to ' + oldpath )
      }
    }
    

    【讨论】:

    • 这将在path 更改时通知,但不会在window.location.pathname 更改时通知。
    • 但是当窗口路径名也改变时路径也会改变
    • 你能给我看一个例子,location.pathname 改变并且你的观察者实际上被触发了吗?
    • 如果您坚持不懈,那么也许我错了,因为我认为会是这种情况..但我仍然会对其进行测试并更新答案..我在移动设备上正确的 noe
    • @samayo 我已经按照您的建议进行了尝试,但是当我在我的根目录后面键入“my-search-query”并按 Enter 时,我得到的只是来自我的 Apache 服务器的 404。抱歉我的菜鸟问题,我是 javascript / vue 的新手。
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2020-12-30
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2019-09-22
    • 1970-01-01
    相关资源
    最近更新 更多