Vue 页面跳转方式 与 参数传递 编程导航

首先:

要清楚的是:vue中都是单页面应用(SPA)居多,而所谓的页面跳转,也是通过history 或 hash 的方式找到对应的路由地址后,再进行重新渲染页面视图(可以测试一下,在window对象上挂载一个自定义属性,只要不刷新页面的话【当然也可以存放到本地存储如:cookie、storage之中】,然后不管在哪个页面 或 组件中都可以访问到该自定义属性,而这样就和vuex的效果就是类似啦),而不是真正的页面跳转。


一、标签跳转:<router-link> 映射路由:

1、不带参数跳转

<!-- home页面(首页) -->

<template>

    <!-- 在Vue中的<router-link>标签中,到页面最终还是转为<a>标签 -->

    <router-link to="/about">
        <button>打开关于我们 - 不带参数1</button>
    </router-link>

    <router-link :to="{path: '/about'}">
        <button>打开关于我们 - 不带参数2</button>
    </router-link>
</template>

 

2、带参数跳转 

<!-- home页面(首页) -->

<template>
    <router-link :to="{path: '/about', query: {id: 1024, name:'mupiao', age: 28 }}">
        <button>打开关于我们 - 带参数1</button>
    </router-link>

    <router-link :to="{name: 'About', params: {id: 1024, name:'mupiao', age: 28 }}">
        <button>打开关于我们 - 带参数2</button>
    </router-link>
</template>

 

3、接收参数

// About页面(关于我们)

<template>
      <section>关于我们</section>
</template>


<script>
export default {
    name: "About",
    data() {
        return {};
    },
    created() {
        // 在Vue实例被创建之后的钩子函数中,接收home页面传过来的参数

        // 以query方式接收参数:【query传递数据是通过URL传递的,类似ajax中的get方式】
        console.log(this.$route.query.id);      // 1014
        console.log(this.$route.query.name);    // mupiao
        console.log(this.$route.query.age);     // 28

        // 以params方式接收参数:【params方式,类似ajax中的post方式】
        console.log(this.$route.params.id);      // 1014
        console.log(this.$route.params.name);    // mupiao
        console.log(this.$route.params.age);     // 28
    }
}
</script>

 

 Vue常用路由配置规则:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Main from '../views/Main.vue'

// 抽离出在这个路由配置表中共用的页面视图,以方便多处使用
const Login = () => import(/* webpackChunkName: "Login" */ '../views/Login.vue');
const News = () => import(/* webpackChunkName: "News" */ '../views/News.vue');
const NotFound = () => import(/* webpackChunkName: "NotFound" */ '../views/NotFound.vue');

Vue.use(VueRouter);

const routes = [ 
  {
    path: '/', // 网站首页
    name: 'Home',
    component: () => import('../views/Home.vue')
  },
  {
    path: '/login',
    name: 'Login',
    component: Login
  },
  {
    path: '/regist',
    name: 'Regist',
    component: () => import('../views/Regist.vue')
  },
  {
    path: '/main', 
    name: 'Main',
    meta: {
      userauth: true // 开启用户鉴权(用户需登录后,才能访问)
    },
    component: Main,

    children: [ // 子路由
      {
        path: '/news/:id(\\d+)',
        name: 'News',
        meta: {
          userauth: true
        },
        component: News,

        children: [ // 第三级子路由
          {
            path: '/main/news/alert',
            name: 'Alert',
            component: () => import('../views/Alert.vue')
          },
          {
            path: '/card/:listId(\\d+)/list/:listId(\\d+)',
            name: 'Card',
            component: () => import('../views/Card.vue')
          }
        ]
      },
      {
        path: '/info/:id(\\d+)',
        name: 'Info',
        meta: {
          userauth: true
        },
        component: () => import(/* webpackChunkName: "Info" */ '../views/Info.vue')
      },
      {
        path: '/send',
        name: 'Send',
        meta: {
          userauth: true
        },
        component: () => import('../views/Send.vue')
      },

      // 默认显示的子路由
      {
        path: '',
        name: 'News',
        component: News
      }
    ],
  },
  {
    path: '/about',
    name: 'About',
    meta: {
      userauth: true
    },
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  },
  {
    path: '/notfound',
    name: 'NotFound',
    component: NotFound
  },

  // 如果找不到对应的路由(页面)就显示404页面
  {
    path: '*',
    name: 'NotFound',
    component: NotFound
  }

];

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
});

router.beforeEach((to, from, next) => {
  // 在进入路由前,判断到该路由需要鉴权(用户登录)则验证用户信息(!Store.state.user.userinfo 没有用户信息),不通过则跳转到登录页。
  if (to.matched.some(matched => matched.meta.userauth) && !Store.state.user.userinfo) {

    next({ name: 'Login' });
  } else {

    next();
  }
});

export default router;

 显示子路由视图一定要加上 <router-view></router-view>

// Main主框架页面

<template>
  <Layout>

    <Header></Header>

    <Content>
      
      <!-- 显示子路由视图 -->
      <router-view></router-view>
    </Content>

    <Footer></Footer>

  </Layout>
</template>

<script>

import Header from "@/components/Header.vue";
import Footer from "@/components/Footer.vue";

export default {
  name: "Main",
  components: {
    Header,
    Footer
  },
  data() {
    return {};
  },
  mounted() {},
  methods: {}
};
</script>

<style lang="scss" scoped>
.ivu-layout {
  .ivu-layout-content {
    min-height: 88vh;
  }
}
</style>

 

 

二、编程式路由跳转: this.$router.push()

1、不带参数跳转

<!-- Home页面(首页) -->

<template>
    <router-link :to="{path: '/about'}">
        <button>打开关于我们</button>
    </router-link>

    <button @click="open">打开关于我们</button>
</template>

<script>
export default {
    name: "Home",
    data() {
        return {};
    },
    methods: {
        open() {
            this.$router.push('/about');
        }
    },
}
</script>

 

2、带参数跳转

<!-- Home页面(首页) -->

<template>
    <router-link :to="{path: '/about'}">
        <button>打开关于我们</button>
    </router-link>

    <button @click="open1">打开关于我们 - query方式</button>
    
    <button @click="open2">打开关于我们 - params方式</button>
</template>

<script>
export default {
    name: "Home",
    data() {
        return {};
    },
    methods: {
        // query方式
        open1() {  
            this.$router.push({
                path: '/about',
                query: {
                  id: 2048,
                  book: "了不起的Node.js",
                  job: "Web前端"
                }
            });
        },

        //⚠️注:如果要传递的参数很长时,请问params方式,因为query方式是通过URL传递的,而URL传参数长度是有限制的哦!!

        // params方式
        open2() {
            this.$router.push({
                name: "About", // ⚠️注:这里不能用path路径,只能用name【请对照router.js中的路由规则中的name项,还有就是一般首字母大写】,否则取不到传过去的数据
                params: {
                  id: 2048,
                  book: "了不起的Node.js",
                  job: "Web前端"
                }
            });
        }
    },
}
</script>

 

3、接收参数

// About页面(关于我们)

<template>
      <section>关于我们</section>
</template>


<script>
export default {
    name: "About",
    data() {
        return {};
    },
    created() {
        // 在Vue实例被创建之后的钩子函数中,接收home页面传过来的参数

        //⚠️注:在传递参数时,用什么方式传参,就用什么方式接收!!

        // 以query方式接收参数:【query传递数据是通过URL传递的,类似ajax中的get方式】
        console.log(this.$route.query.id);      // 2048
        console.log(this.$route.query.book);    // 了不起的Node.js
        console.log(this.$route.query.job);     // Web前端

        // 以params方式接收参数:【params方式,类似ajax中的post方式】
        console.log(this.$route.params.id);      // 2048
        console.log(this.$route.params.book);    // 了不起的Node.js
        console.log(this.$route.params.job);     // Web前端

        // this.$route 路由信息对象
        console.log(this.$route);  //this.$route 对象中包涵了路由的相关信息,请自看!!

</script>

 

 

 

真正的页面跳转:

一、HTML超链接跳转:<a href="http://www.xxx.com">跳转链接</a>

//打开外部链接
<a target="_blank" href="https://www.baidu.com/s?wd=Vue">百度一下 Vue</a>

 

 

二、浏览器BOM中的location.href跳转:

//在当前页面打开URL页面
window.location.href = "https://www.baidu.com/s?wd=Vue";

 

 

三、浏览器BOM中的window.open()跳转:

//打开一个新的浏览器窗口

window.open("https://www.baidu.com/s?wd=Vue", "_blank", "width=1000, height=500", true);

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 中通过导航菜单跳转页面可以使用 Vue Router 来实现。 首先,需要在项目中安装 Vue Router: ``` npm install vue-router --save ``` 然后在 `main.js` 中引入并使用 Vue Router: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import App from './App.vue' import Home from './views/Home.vue' import About from './views/About.vue' Vue.use(VueRouter) const routes = [ { path: '/', component: Home }, { path: '/about', component: About } ] const router = new VueRouter({ routes // short for `routes: routes` }) new Vue({ router, render: h => h(App), }).$mount('#app') ``` 在上面的代码中,我们定义了两个路由,分别是 `/` 和 `/about`,并分别对应着 `Home` 和 `About` 组件。然后通过 `VueRouter` 创建了一个路由实例,并将其传递给 `Vue` 实例中。 接下来,在项目中创建导航菜单,在导航菜单中使用 `router-link` 组件来实现页面跳转: ```html <router-link to="/">Home</router-link> <router-link to="/about">About</router-link> ``` 在上面的代码中,我们通过 `to` 属性来指定跳转的路径。当用户点击导航菜单中的链接时,路由会根据路径自动渲染对应的组件。 除了使用 `router-link` 组件,我们还可以使用编程导航来实现页面跳转。例如,在组件中可以使用 `$router.push` 方法来进行跳转: ```javascript // 在组件中跳转到 /about 页面 this.$router.push('/about') ``` 以上就是在 Vue 中通过导航菜单跳转页面的基本实现方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值