账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    我用vue-cli 监听路由变化,可是为什么不进这个监听函数啊?
    26
    0

    题目描述

    我用vue-cli 监听路由变化,可是为什么不进这个监听函数啊?

    题目来源及自己的思路

    首先我用watch监听路由变化,想得到他的上一个跳转路由名称,但始终进入不了路由监听函数,得不到from里面的参数,后来我就想着用beforeRouteEnter这个函数,虽然得到了from里面的路径,但是不能操作data里面的数据啊,打印出来的this为undefined,求大神指教

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)
    watch: {

    $route: {
      handler (val, oldval) {
        console.log(val) // 新路由信息
        console.log(oldval) // 老路由信息
      },
      // 深度观察监听
      deep: true
    }

    },

    beforeRouteEnter (to, from, next) {

      console.log('to:', to)
      console.log('from:', from)
    if (from.fullPath === '/trackCoupon') {
        this.products = []
      console.log('this:', this) // 打印出来的this为undefined
    }
      next()

    },

    你期待的结果是什么?实际看到的错误信息又是什么?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 吹箫望江南 普通会员 1楼

      在Vue.js中,你可以使用路由守卫(Route Guard)来监听路由变化并执行相应的逻辑。以下是一个简单的例子:

      ```javascript // src/router.js import Vue from 'vue' import Router from 'vue-router'

      Vue.use(Router)

      export default new Router({ routes: [ { path: '/products/:id', name: 'Product', component: () => import('./product.vue'), children: [ { path: '/product/:id/edit', name: 'EditProduct', component: () => import('./editProduct.vue'), }, ], }, ], }) ```

      在上面的代码中,src/router.js文件包含一个Vue Router实例和一个路由配置。路由配置包含一个products/:id路由,该路由将匹配路径为/products/:id的路由。当这个路由被应用到Vue实例上时,store/index.js中的路由钩子(如routeEnter)会被调用。

      以下是如何在src/components/product.vue文件中添加路由守卫的示例:

      ```vue // src/components/product.vue

      ```

      src/components/product.vue中,我们定义了一个product数据结构和一个editProduct方法。当用户点击"Edit"按钮时,editProduct方法将被调用。在editProduct方法中,我们可以根据product对象中的productDetails数组来更新路由守卫的逻辑。

      在路由守卫中,我们使用@routeEnter钩子来监听/products/:id的路由变化。当这个路由被应用到Vue实例上时,store/index.js中的routeEnter钩子会被调用。在这个钩子中,我们首先检查当前路由的匹配路径是否与/products/:id匹配,如果是,我们就执行editProduct方法并更新路由守卫的this.product对象。这样,即使editProduct方法没有被调用,editProduct的逻辑也会在路由匹配时被应用到Vue实例上,从而实现了路由守卫的功能。

    • 凉城薄梦风轻 普通会员 2楼

      在Vue.js中,你可以使用路由守卫(Route Guard)来监听路由变化并执行相应的逻辑。以下是一个简单的例子:

      ```javascript // src/router.js import Vue from 'vue' import Router from 'vue-router'

      Vue.use(Router)

      export default new Router({ routes: [ { path: '/products/:id', name: 'Product', component: () => import('./product.vue'), children: [ { path: '/product/:id/edit', name: 'EditProduct', component: () => import('./editProduct.vue'), }, ], }, ], }) ```

      在上面的代码中,src/router.js文件包含一个Vue Router实例和一个路由配置。路由配置包含一个products/:id路由,该路由将匹配路径为/products/:id的路由。当这个路由被应用到Vue实例上时,store/index.js中的路由钩子(如routeEnter)会被调用。

      以下是如何在src/components/product.vue文件中添加路由守卫的示例:

      ```vue // src/components/product.vue

      ```

      src/components/product.vue中,我们定义了一个product数据结构和一个editProduct方法。当用户点击"Edit"按钮时,editProduct方法将被调用。在editProduct方法中,我们可以根据product对象中的productDetails数组来更新路由守卫的逻辑。

      在路由守卫中,我们使用@routeEnter钩子来监听/products/:id的路由变化。当这个路由被应用到Vue实例上时,store/index.js中的routeEnter钩子会被调用。在这个钩子中,我们首先检查当前路由的匹配路径是否与/products/:id匹配,如果是,我们就执行editProduct方法并更新路由守卫的this.product对象。这样,即使editProduct方法没有被调用,editProduct的逻辑也会在路由匹配时被应用到Vue实例上,从而实现了路由守卫的功能。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部