标签: vue-router

Vue 路由器视图在使用 router.beforeEach 时不渲染

我正在使用 Vue Router,我需要使用router.beforeEach回调来确定是否命中了某个路由。唯一的问题是,当使用回调时,<router-view></router-view>不会呈现任何内容。

app.vue

<template>
    <div id="app">
        <navComponent></navComponent>
        <router-view></router-view>
    </div>
</template>

<script>
    import navComponent from './nav'
        export default {
            components: {
                navComponent
            }
        }
</script>
Run Code Online (Sandbox Code Playgroud)

routes.js

import VueRouter from 'vue-router';

export default new VueRouter({

    routes: [
        {
            path: '/',
            component: require('./views/home')
        },
        {
            path: '/logout'
        }
    ],

    linkActiveClass: 'is-active'
});
Run Code Online (Sandbox Code Playgroud)

app.js

import './bootstrap';
import router from './routes';
import app from './views/app';

router.beforeEach((to, from, next) => {  //if this callback was commented out the <router-view></router-view> would render …
Run Code Online (Sandbox Code Playgroud)

vue.js vue-router vue-component

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

无法使用VueRouter呈现子组件

我正在学习VueJS,使用vue-cli创建了一个新的Vue应用程序,并对其进行了一些更改。这是我在router.js中拥有的:

import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello'
import Panel from '@/components/Panel'
import Search from '@/components/Search'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Hello',
      component: Hello
    },
    {
      path: '/panel',
      name: 'Panel',
      component: Panel,
      children: {
        path: 'search',
        component: Search
      }
    }
  ]
})
Run Code Online (Sandbox Code Playgroud)

我的Panel.vue可以正确呈现,而在路由器对象中没有'children'键。这是内容:

<template>
  <div class="panel">
    <h1>Panel</h1>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: 'panel',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  } …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vue-router vue-component vuejs2

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

router-link 替换为 vue-router?

根据文档,使用带有 vue-router 的 router-link 标签,“设置替换属性将在单击时调用 router.replace() 而不是 router.push(),因此导航不会留下历史记录”。但这似乎并没有发生在我身上,所以我想我一定是误解了一些东西。我的 SPA 中有一个导航菜单,每个菜单项中的路由器链接都有一个替换道具。然而,当我依次单击每个菜单项时,它显然会添加到历史记录中,因为后退按钮将我带回上一项,并且我实际上可以在 Firefox 历史记录中看到添加到的 URL 列表。我究竟做错了什么?

vue.js vue-router

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

Vue - 如何访问 beforeRouteLeave 中的数据 - 在组件保护中

尝试访问 beforeRouteLeave 中的数据,但一切正常 undefined

下面的代码

<template>
  ...
</template>

<style lang="scss">
  ...
</style>

<script>

  export default {
    name: 'blog-new',
    data() {
      return {
        isBodyChanged: false,
        isPublished: false,
        isTitleChanged: false,
      }
    },
    created() {
      ...
    },
    beforeRouteLeave: (to, from, next) => {
      console.log(this.isBodyChanged) //<--undefined
      if (this.isBodyChanged) {
        return next(false)
      } else {
        return next()
      }
    }
  }
</script>
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vue-router vuejs2

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

Vue children路由器:url已更改但显示父组件

我正在学习Vue并坚持使用嵌套路由器,我在路由中定义了一些子路由器,但是当我访问子路由时它仍然显示父组件,我的代码如下:

App.vue:

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <router-link :to="{name: 'Home'}">Home</router-link>
    <router-link to="/cart">Cart</router-link>
    <router-link to="/admin">Admin</router-link>
    <router-link to="/admin/add">?Admin Add?</router-link>
    <router-link to="/admin/edit">Admin Edit</router-link>

    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'app'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
Run Code Online (Sandbox Code Playgroud)

路由器/ index.js:

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/pages/Home'
import Cart from '@/components/pages/Cart'
import Index from '@/components/pages/Admin/Index'
import Add from '@/components/pages/Admin/Add'
import Edit from …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vue-router

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

VueJS如何在警惕之前注册全局

每个路线的beforeEach钩子都像在docs中一样:我的页面应在路线更改时滚动到顶部。

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
   window.scrollTo(0, 0)
      next();
})
Run Code Online (Sandbox Code Playgroud)

但是我的路由器具有其他结构,因此无法正常工作:

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import Contact from '@/components/Contact'

Vue.use(Router)

export default new Router({

  beforeEach: (to, from, next) => {
    window.scrollTo(0, 0)
    next();
  },

  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/kontakt',
      name: 'Contact',
      component: Contact
    },
  ]
})
Run Code Online (Sandbox Code Playgroud)

在此先感谢=)还是在组件上使用.created挂钩滚动到页面顶部更好?

  created() {
    window.scrollTo(0, 0);
  }
Run Code Online (Sandbox Code Playgroud)

vue-router vuejs2

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

Vue-Router既不观看路线也不导航护卫射击

在具有以下代码的单页应用程序中使用vue-router,当重定向到mycomponent时,watch $ route函数不会触发。

同样,mycomponent中的beforeRouteUpdate也不会触发。

在组件加载期间,如何检测变量何时被标记到路由上?

应用程序

<template>
  <router-view></router-view>
</template>
<script>
import Vue from 'vue'
export default {
  name: 'app'
}
</script>
Run Code Online (Sandbox Code Playgroud)

index.js

import Vue from 'vue'
import Router from 'vue-router'
import MyView from '@/views/MyView'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      redirect: '/home',
      name: 'Home',
      children: [
        {
          path: '/mycomponent',
          name: 'MyComponent',
          component: MyComponentView
        },
        {
          path: '/mycomponent/:id',
          component: MyComponentView,
          props: true
        }
]}]})
Run Code Online (Sandbox Code Playgroud)

mycomponent.vue

<template>
  <component :is="activeComponent" :id="id"></component>
</template>

<script>
  export default {
    name: 'MyComponentView',
    components: …
Run Code Online (Sandbox Code Playgroud)

vue.js vue-router vuejs2

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

直接访问二级vue路由时出错

我在vue应用程序中使用vue-router。我的申请中有以下路线。

const routes = [
    {name: "home", path: "/", component: Home},
    {name: "user", path: "/user", component: User},
    {name: "edit-user", path: "/user/edit", component: EditUser}
];

const router = new VueRouter({
    routes: routes,
    mode: 'history'
});
Run Code Online (Sandbox Code Playgroud)

在使用router-link以下给定的路径访问时,两条路线都可以正常工作。

<router-link to="/user">Go to user</router-link>
<router-link to="/user/edit">Edit user</router-link>
Run Code Online (Sandbox Code Playgroud)

如果我直接通过页面访问路由,则路由“ / user”会完美工作。但是路由“ / user / edit”显示黑页,控制台中仅包含以下错误(没有其他任何错误详细信息)。

Uncaught SyntaxError: Unexpected token <
Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题?

javascript vue.js vue-router vuex vuejs2

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

检测Vue-Router导航护罩中的后退按钮

路线的更改方式对我来说很重要。因此,我想抓住浏览器或gsm的后退按钮更改路线的时间。

这就是我所拥有的:

router.beforeEach((to, from, next) => {
  if ( /* IsItABackButton && */ from.meta.someLogica) {
    next(false) 
    return ''
  }
  next()
})
Run Code Online (Sandbox Code Playgroud)

有没有一些我可以代替IsItABackButton注释使用的内置解决方案?我猜Vue-router本身还没有,但是任何解决方法也可以在这里工作。还是会有另一种首选的方式来识别它?

javascript cordova vue.js vue-router vuejs2

1
推荐指数
4
解决办法
3457
查看次数

Vue路由器总是在初始加载时加载延迟加载的模块

这是使用Vue官方路由器的延迟加载实现

src /路由器/index.js

import Vue from "vue";
import VueRouter from "vue-router";

const Foo = () => import("@/components/Test2");

const Bar = () => import("@/components/Test");

Vue.use(VueRouter);

export default new VueRouter({
  mode: "history",
  routes: [
    {
      path: "/test",
      name: "test",
      component: Bar
    },
    {
      path: "/test2",
      name: "test2",
      component: Foo
    }
  ]
});
Run Code Online (Sandbox Code Playgroud)

src / main.js

import Vue from "vue";
import App from "./App.vue";
import router from "./router";

Vue.config.productionTip = false;

new Vue({
  render: h => h(App),
  router
}).$mount("#app");
Run Code Online (Sandbox Code Playgroud)

路由按预期工作,但是延迟加载无法正常工作,当我检查第一次加载时的“网络”选项卡时,我能够看到Web Pack生成的延迟加载文件

javascript lazy-loading vue-router vuejs2

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