Vue-router

什么是路由?

后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;

前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;

 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);

vue路由的基本使用

1. 导入 vue-router 组件类库:

<!--  导入 vue-router 组件类库 -->
  <script src="./lib/vue-router-2.7.0.js"></script>

2. 使用 router-link 组件来导航

<!--  使用 router-link 组件来导航 -->
<router-link to="/login" tag='span'>登录</router-link>
<router-link to="/register">注册</router-link>

3. 使用 router-view 组件来显示匹配到的组件

<!-- 使用 router-view 组件来显示匹配到的组件 -->
<router-view></router-view>

4. 创建使用`Vue.extend`创建组件

    // 4.1 使用 Vue.extend 来创建登录组件
    var login = Vue.extend({
      template: '<h1>登录组件</h1>'
    });

    // 4.2 使用 Vue.extend 来创建注册组件
    var register = Vue.extend({
      template: '<h1>注册组件</h1>'
    });

5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则

//  创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
    var router = new VueRouter({
      routes: [
        { path: '/login', component: login },
        { path: '/register', component: register }
      ]
    });

6. 使用 router 属性来使用路由规则

//  创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      router: router // 使用 router 属性来使用路由规则
    });

 在路由组件传参

<!-- router-link 默认渲染为一个a 标签,可以使用tag指定标签 ,查询字符串?之后的,给路由传递参数,则 不需要修改 路由规则的 path 属性 -->
<router-link to="/user/1?name=Bob" tag='span'></router-link>
<router-view></router-view>

//在规则中定义参数:

{ path: '/user/:id', component: user }

//通过 `this.$route.params`来获取路由中的参数:

var user= Vue.extend({
    template: '<h1>注册组件 --- {{this.$route.params.id}}</h1>'
});

但是,上面的写法在组件中使用$router.*,会使组件与该组件使用的路由之间有高度的耦合,这样该组件只能在特点的url上才能使用,严重降低了代码的复用性,因此我们在下面使用props进行解耦

<router-link to="/user/1?name=Bob" tag='span'></router-link>
<router-view></router-view>

// 在规则中定义参数,props 设置为true, $route.params 将会被设置为组件属性
{ path: '/user/:id', component: user ,props: true}

// 如果 props 是一个对象,它会被按原样设置为组件属性。当 props 是静态的时候有用
{ path: '/A', component: componentA ,props: {obj: 'obj'}}

// props是一个函数。这样你便可以将参数转换成另一种类型,将静态值与基于路由的值结合等等
{ path: '/B', component: componentB ,props: (arg)=>({query: $route.query});}

var user= Vue.extend({
    props: ['id'],
    template: '<h1>注册组件 --- {{id}}</h1>'
});

 

使用Children实现路由嵌套

  <div id="app">
    <router-link to="/account">Account</router-link>

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

  <script>
    // 父路由中的组件
    const account = Vue.extend({
      template: `<div>
        这是account组件
        <router-link to="/account/login">login</router-link> | 
        <router-link to="/account/register">register</router-link>
        <router-view></router-view>
      </div>`
    });

    // 子路由中的 login 组件
    const login = Vue.extend({
      template: '<div>登录组件</div>'
    });

    // 子路由中的 register 组件
    const register = Vue.extend({
      template: '<div>注册组件</div>'
    });

    // 路由实例
    var router = new VueRouter({
      routes: [
        { path: '/', redirect: '/account/login' }, // 使用 redirect 实现路由重定向
        {
          path: '/account',
          component: account,
          children: [ // 通过 children 数组属性,来实现路由的嵌套
            { path: 'login', component: login }, // 注意,子路由的开头位置,不要加 / 路径符
            { path: 'register', component: register }
          ]
        }
      ]
    });

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {},
      components: {
        account
      },
      router: router
    });
  </script>

命名路由

<router-link to="{name: 'user', params: { userId: 123 }}">User</router-link>

var router = new VueRouter({
    routes:[
        {
            path: '/user',
            name: 'user',
            component: user
        }
    ]
})

命名视图: 同级展示多个视图,而不是嵌套展示

<router-view name="a"></router-view>
<router-view name="b"></router-view>
<script>
  var router = new VueRouter({
      routes: [
          {
              path: '/', components: {
                  default: header,
                  a: componentA,
                  b: componentB
              }
          }
  ]
});
</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue Router 是 Vue.js 官方提供的路由管理器。它允许你在 Vue.js 应用实现单页面应用(SPA)的路由功能。通过使用 Vue Router,你可以定义不同的路由路径和对应的组件,使得在用户访问不同的路径时,能够动态地加载相应的组件内容,实现页面的切换。 Vue Router 提供了路由配置的方式,可以在路由配置定义各个路径对应的组件,并且可以设置路由参数、路由守卫等。 在 Vue.js 应用使用 Vue Router 需要先安装依赖包。你可以使用 npm 或 yarn 进行安装,命令如下: ```bash npm install vue-router # 或者 yarn add vue-router ``` 安装完成后,你需要在你的 Vue.js 应用引入 Vue Router,并在 Vue 实例使用它。你可以在入口文件(如 main.js)进行配置,示例代码如下: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import Home from './components/Home.vue' import About from './components/About.vue' Vue.use(VueRouter) const routes = [ { path: '/', component: Home }, { path: '/about', component: About } ] const router = new VueRouter({ routes }) new Vue({ router, render: h => h(App) }).$mount('#app') ``` 在上面的示例代码,我们引入了两个组件 Home 和 About,并定义了两个路由路径 '/' 和 '/about' 对应的组件。然后创建了一个 VueRouter 实例,并传入了路由配置。最后,我们将创建的 router 实例传入到 Vue 实例,使得整个应用具有路由功能。 这只是一个简单的示例,Vue Router 还提供了更多的配置选项和路由功能,比如嵌套路由、命名路由、动态路由等等。你可以查阅 Vue Router 的官方文档来获取更详细的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值