标签: vue-router

Vue JS:如何在路由器链接中设置活动 <a> 标签的样式?

我正在尝试编辑我的路由器链接,以便当链接处于活动状态时文本的颜色以及背景会发生变化。

在课程中.router-link-exact-active,我已经设置了它,以便背景从某些默认值正确更改,但文本颜色始终保持不变?

事实上,改变链接文本颜色(包括非活动的默认蓝色)的唯一方法是设置标签本身的样式。

我的链接代码如下:

<router-link :to="{path: '/Homer'}" exact tag="li"><a>Homer</a></router-link>
Run Code Online (Sandbox Code Playgroud)

标签的 CSS(在链接激活之前设置颜色 - 它是标准颜色):

a {
  color:royalblue;
  text-decoration: none;
}
Run Code Online (Sandbox Code Playgroud)

router-exact-link-active 的 CSS 是:

.router-link-exact-active {
  background: yellow;
  border-radius: 5px;
  color: red;
  font-variant: italic;
}
Run Code Online (Sandbox Code Playgroud)

因此,li 的背景颜色(当然,因为 router-link 设置为 li 标记)正确更改,但文本颜色无论如何仍然保持蓝色。

文本的颜色(和其他设置样式)不应该层叠吗父 li 分配的活动类向下级联到标签(无论路由器链接处于活动状态还是不活动状态) - 例如本教程中的 https: //youtu.be/yn0_6T4HwHs?t=266?

如果不是,我如何在文本处于活动状态时设置文本样式 - 我猜我会将某种活动类附加到 - 不是 a:active 的类,因为一旦鼠标处于活动状态,文本就不是“活动”的点击它后 - 但我似乎找不到正确的方法来做到这一点?

抱歉,如果这是一个非常基本的问题,但我四处寻找答案但找不到。

非常感谢。

css vue.js vue-router

3
推荐指数
2
解决办法
1万
查看次数

定义路由的元数据时可以访问路由器查询参数吗?

我正在使用 Vue Router 并设置meta对象字段,该字段用于设置页面标题和描述。

现在我设置的路线是这样的:

[...
{
   path: '/page1',
   component: Page1Component,
   meta: {
      title: 'Title for page1'
   }
}
...]
Run Code Online (Sandbox Code Playgroud)

然后将其与 DOM 同步:

router.beforeEach((to, from, next) => {
    document.title = to.meta.title;
    next();
});
Run Code Online (Sandbox Code Playgroud)

我的路线之一,我想在标题中使用查询字符串,但我无法将函数传递给对象meta。有没有一种方法可以做到这一点,而无需在组件中定义标题?

例如,我想做的事情:

[...
{
   path: '/page1',
   component: Page1Component,
   meta: (route) => {
      title: `dynamic title is ${route.query.param}`
   }
}
...]
Run Code Online (Sandbox Code Playgroud)

vue.js vue-router

3
推荐指数
1
解决办法
2651
查看次数

this.$root 在组件中意味着什么?

我有一个主要的 App.vue 组件。在那里,我有以下代码:

export default {
  data() {
    return {
      testVariable:false
    }
  },
}
</script>

<template>
  <VApp :dark="testVariable:false"
    <div id="app">
      <RouterView :key="$route.fullPath" />
    </div>
  </VApp>
</template>
Run Code Online (Sandbox Code Playgroud)

然后在其中一个组件中,我有以下代码:

data() {
    return {
      testVariable: this.$root.$children[0].testVariable,
    }
  },

methods: {
    darkModeToggle(e) {
      this.$root.$children[0].testVariable = e
    },
  },
Run Code Online (Sandbox Code Playgroud)

问题1)this.$root 和 this.$root.children 是什么意思?始终是this.$rootApp.vue 组件(因为 App.vue 是所有组件的父组件)。是this.$root.children这个 App.vue 组件的子组件,这意味着所有其他组件都将在this.$root.children数组中?

问题2)这行是什么意思?<RouterView :key="$route.fullPath" />。我的意思是为什么我们会通过:key="$route.fullPath"?

vue.js vue-router vue-component vuejs2

3
推荐指数
1
解决办法
3060
查看次数

未捕获的类型错误:routes.forEach 不是函数

我是 Vue 新手,我正在努力让我的路线正常工作。我只需要使用该文章的 ID 进入我的详细信息页面即可。

\n\n

我尝试了很多教程但没有成功。(我在制作项目后手动安装了路线)

\n\n

但我遇到了一个不常见的错误。我没有\xe2\x80\x99找不到任何解决方案。

\n\n

(在chrome的控制台发现错误)

\n\n

未捕获的类型错误:routes.forEach 不是函数

\n\n

错误[![]] 1

\n\n
//main.js\n\nimport Vue from \'vue\';\nimport VueRouter from \'vue-router\';\nimport \'@babel/polyfill\';\nimport \'mutationobserver-shim\';\nimport \'./plugins/bootstrap-vue\';\nimport App from \'./App.vue\';\nimport routes from \'./routes\';\n\nVue.use(VueRouter);\nwindow.Vue = Vue; \n\nVue.config.productionTip = false;\nwindow.Vue = require(\'vue\');\n\nconst router = new VueRouter({routes});\n\nnew Vue({\n   el: \'#app\',\n   router,\n  render: h => h(App),\n}).$mount(\'#app\');\n
Run Code Online (Sandbox Code Playgroud)\n\n
// routes.js\n\nimport Vue from \'vue\';\nimport Router from \'vue-router\';\nimport Homepage from \'./components/Homepage.vue\';\nimport Details from \'./components/Details.vue\';\n\n\n\nVue.use(Router);\n\nexport default new Router({\n  routes: [\n    {\n      path: \'/\',\n      name: \'homepage\',\n      component: Homepage\n …
Run Code Online (Sandbox Code Playgroud)

routes vue.js vue-router axios

3
推荐指数
1
解决办法
8066
查看次数

观察 $route.params.id 不会触发 Vue 组件的重新渲染

我有一个Post显示用户帖子的组件。到达帖子的 URL/路线如下:

\n\n

http://localhost:8080/123-todays-bike-ride作为路线中的参数123PostID

\n\n

在我的Post.vue组件中,我有以下代码:

\n\n
<template>\n    <div>\n        <h1>{{Post.PostTitle}}</h1>\n        <p>{{Post.Content}}</p>\n    </div>\n</template>\n\n<script>\n    export default {\n        name: "Post",\n        watch:{\n            \'$route.params.PostID\': function() {\n                    this.getPost(); // does not seem to be triggered?\n                }\n        },\n        computed:\n            {\n                Post() {\n                    return this.$store.getters.getPost\n                }\n            },\n        serverPrefetch() {\n            return this.getPost();  // to do with SSR\n        },\n        mounted() {\n            if (this.Post == null || !this.Post.length) {\n                this.getPost();\n            }\n        },\n        methods: {\n            getPost() {\n                return this.$store.dispatch(\'loadPost\', {PostID: this.$route.params.PostID})\n\n            }\n        }\n    }\n</script>\n …
Run Code Online (Sandbox Code Playgroud)

vue.js vue-router vue-component

3
推荐指数
1
解决办法
6233
查看次数

Vue-router 组件内防护不会触发 router.push() 被调用

beforeRouteLeave单击 时会触发组件内防护<router-link to="/">。但是,当我以编程方式调用时,它不会被触发router.push({ path: "/" })

难道这有什么问题吗?

编辑

我只是尝试制作一个沙箱,发现只要使用动态参数导航到同一路径就会发生这种情况。

例如,从 导航到/item/1/item/2导致此问题。

vue.js vue-router

3
推荐指数
1
解决办法
1731
查看次数

通过 vue-router 传递多个参数,其中一个在 URL 中使用

我正在尝试将数据从一条路线传递到另一条路线。但是,我需要将 ID 和标题传递给子路由,并仅使用 URL 中的标题,而不使用 ID。我将使用 ID 来获取数据。我到处都读过,但我想不出解决我的问题的方法。

例子:

假设我们在名为“图书馆”的路线上,那里有不同的书籍。当点击其中一本书时,我想转到另一条路线,该路线将在 URL 中显示书名,并具有可用于数据获取的 ID。我怎样才能做到这一点?

我已经找到了如何进行动态 URL 匹配,我可以将其用于标题显示,但无法传递 ID:

<router-link :to="{path: '/Book/' + book.title}">

我还发现了如何使用命名路由传递参数,但是如何使用 URL 中的标题呢?

<router-link :to="{name: 'Book', params: {title: book.title}}">

我确信我在这里遗漏了一些东西,但我不完全确定是什么。

javascript vue.js vue-router

3
推荐指数
1
解决办法
2万
查看次数

如何在另一个文件中使用vue路由器?

vue-router 运行良好,但我们想将路由推送到另一个文件中。一些代码来澄清:

// src/router/index.ts
import { route } from 'quasar/wrappers'
import VueRouter from 'vue-router'
import routes from './routes'

export default route(function ({ Vue }) {
  Vue.use(VueRouter)
  const Router = new VueRouter({
    scrollBehavior: () => ({ x: 0, y: 0 }),
    routes,
    mode: process.env.VUE_ROUTER_MODE,
    base: process.env.VUE_ROUTER_BASE,
  })

  return Router
})
Run Code Online (Sandbox Code Playgroud)

如果能够像这样在另一个文件中调整路线,那就太好了:

// src/services/auth/authService.ts
import router from 'src/router'

if (router.currentRoute.path === '/login') {
  console.log('authService push to /');
  router.push('/')
}
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

TS2339:类型“RouteCallback”上不存在属性“currentRoute”。

我们可能没有正确导出/导入路由器。

javascript typescript vue.js vue-router quasar-framework

3
推荐指数
1
解决办法
7717
查看次数

vue-router (vue 3) createWebHistory 未找到位置与路径的匹配项

我有一个 laravel 8 项目,并将 laravel-mix 升级到 v6 以支持 vue 3。

问题是来自 vue-router 4 的 createWebHistory

包.json

{
    "private": true,
    "scripts": {
        "development": "mix",
        "watch": "mix watch",
        "watch-poll": "mix watch -- --watch-options-poll=1000",
        "hot": "mix watch --hot",
        "production": "mix --production"
    },
    "devDependencies": {
        "@vue/compiler-sfc": "^3.0.3",
        "axios": "^0.19",
        "cross-env": "^7.0",
        "laravel-mix": "^6.0.0-beta.14",
        "lodash": "^4.17.19",
        "postcss": "^8.1.10",
        "resolve-url-loader": "^3.1.0",
        "sass": "^1.29.0",
        "sass-loader": "^8.0.2",
        "vue-loader": "^16.1.0",
        "vue-template-compiler": "^2.6.12"
    },
    "dependencies": {
        "mitt": "^2.1.0",
        "vue": "^3.0.3",
        "vue-cookie-next": "^1.0.3",
        "vue-router": "^4.0.0-rc.6",
        "vue-sweetalert2": "^4.1.1"
    }
}
Run Code Online (Sandbox Code Playgroud)

webpack.mix.js

const …
Run Code Online (Sandbox Code Playgroud)

laravel vue.js vue-router vuejs3 vue-router4

3
推荐指数
2
解决办法
2万
查看次数

在 Ionic Vue 应用程序中使用选项卡时导航到不同路线的问题

我是一名经验丰富的前端开发人员,但我对 Ionic 很陌生,所以请原谅我问了一个愚蠢的问题。

我正在使用 Ionic-Vue 创建移动应用程序。

我从选项卡默认模板开始。我可以毫无问题地在选项卡之间切换:每个选项卡都有关联的路线和组件,并且当我切换选项卡时会立即显示正确的组件。

现在来说说问题。

我正在尝试为登录屏幕添加新的路由/组件。我希望登录屏幕位于选项卡系统之外,因此我将其作为顶级路由“/login”及其关联组件。我在第一个选项卡上添加了一个新按钮以便登录,这就是代码。

<ion-button href="/login">LOGIN</ion-button>
Run Code Online (Sandbox Code Playgroud)

但是,当我按下按钮时,整个页面都会重新加载,切换组件所需的时间比我浏览不同选项卡时要多得多。在我看来,它没有使用内部路由器,而是更改了页面的实际 URL,导致整个应用程序再次向服务器请求。我认为这与我使用选项卡默认模板有关,也许如果您使用选项卡就不能拥有独立的路由?

这是我的路由表:

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    redirect: '/tabs/home'
  },
  {
    path: '/tabs/',
    component: Tabs,
    children: [
      {
        path: '',
        redirect: 'home'
      },
      {
        path: 'home',
        component: () => import('@/views/Home.vue')
      },
      {
        path: 'tab1',
        component: () => import('@/views/Tab1.vue')
      },
      {
        path: 'tab2',
        component: () => import('@/views/Tab2.vue')
      },
      {
        path: 'tab3',
        component: () => import('@/views/Tab3.vue')
      }
    ]
  },
  {
    path: '/login',
    component: () => …
Run Code Online (Sandbox Code Playgroud)

javascript ionic-framework vue.js vue-router ionic-vue

3
推荐指数
1
解决办法
3105
查看次数