Vue.js使用vue-router构建单页应用

0

https://www.iviewui.com/components/tabs

传统的网页应用

单页应用

单页应用的优缺点

每种技术都有其利弊,单页应用也是如此。

  • 无刷新体验,这个应该是最显著的有点,由于路由分发直接在浏览器端完成,页面是不刷新,对用户的响应非常及时,因此提升了用户体验;
  • 完全的前端组件化,前端开发不再以页面为单位,更多地采用组件化的思想,代码结构和组织方式更加规范化,便于修改和调整;
  • API 共享,如果你的服务是多端的(浏览器端、Android、iOS、微信等),单页应用的模式便于你在多个端共用 API,可以显著减少服务端的工作量。容易变化的 UI 部分都已经前置到了多端,只受到业务数据模型影响的 API,更容易稳定下来,便于提供鲁棒的服务;
  • 组件共享,在某些对性能体验要求不高的场景,或者产品处于快速试错阶段,借助于一些技术(HybridReact Native),可以在多端共享组件,便于产品的快速迭代,节约资源。

缺点:

  • 首次加载大量资源,要在一个页面上为用户提供产品的所有功能,在这个页面加载的时候,首先要加载大量的静态资源,这个加载时间相对比较长;
  • 较高的前端开发门槛,MVC 前置,对前端工程师的要求提高了,不再是『切切图,画画页面这么简单』;同时工作量也会增加数倍,开发这类应用前端工程师的数量往往多于后端;
  • 不利于 SEO,单页页面,数据在前端渲染,就意味着没有 SEO,或者需要使用变通的方案。

使用vue-router构建单页应用

vue-router.js是Vue.js官方的路由插件用于构建单页面应用。
vue的单页应用是基于路由和组件的。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单面应用中,则是路径之间的切换,也就是组件的切换。

先来看一下官方提供的最简单的例子:示例
HTML

  1. <script src=“https://unpkg.com/vue/dist/vue.js”></script>
  2. <script src=“https://unpkg.com/vue-router/dist/vue-router.js”></script>
  3. <div id=“app”>
  4. <h1>Hello App!</h1>
  5. <p>
  6. <!– 使用 router-link 组件来导航. –>
  7. <!– 通过传入 `to` 属性指定链接. –>
  8. <!– <router-link> 默认会被渲染成一个 `<a>` 标签 –>
  9. <router-link to=“/foo”>Go to Foo</router-link>
  10. <router-link to=“/bar”>Go to Bar</router-link>
  11. </p>
  12. <!– 路由出口 –>
  13. <!– 路由匹配到的组件将渲染在这里 –>
  14. <router-view></router-view>
  15. </div>
  • router-link标签:跳转的链接,to=””是必须的属性,双引号中的内容是我们接下来在JS文件中定义的路由path。
  • router-view标签:展示我们匹配到的组件的区域。

JavaScript

  1. // 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)
  2. // 1. 定义(路由)组件。
  3. // 也可以从其他文件 import 进来
  4. const Foo = { template: ‘<div>foo</div>’ }
  5. const Bar = { template: ‘<div>bar</div>’ }
  6. // 2. 定义路由
  7. // 每个路由应该映射一个组件。 其中”component” 可以是
  8. // 通过 Vue.extend() 创建的组件构造器,
  9. // 或者,只是一个组件配置对象。
  10. const routes = [
  11. { path: ‘/foo’, component: Foo },
  12. { path: ‘/bar’, component: Bar }
  13. ]
  14. // 3. 创建 router 实例,然后传 `routes` 配置
  15. // 你还可以传别的配置参数, 不过先这么简单着吧。
  16. const router = new VueRouter({
  17. routes // (缩写)相当于 routes: routes
  18. })
  19. // 4. 创建和挂载根实例。
  20. // 记得要通过 router 配置参数注入路由,
  21. // 从而让整个应用都有路由功能
  22. const app = new Vue({
  23. router
  24. }).$mount(‘#app’)
  25. // 现在,应用已经启动了!

JavaScript文件主要做的事情是:

  • 定义路由列表,即routes。
  • 创建router实例及router配置,即router。
  • 创建和挂载根实例。

以上只是教我们用最简单的方法使用vue-router。但实际开发过程中,首先我们的vue组件显然不会只有一个template模板这么简单,会用到vue的单文件组件
其次我们通常会希望<router-view>的范围是整个页面,而不是像现在这样一直有几个碍眼的导航存在于页面上,这就需要先定义好默认状态下<router-view>显示的内容。

既然是单页应用(SPA),那么整个项目有以下三个文件是必要的:

  • 一个html文件:index.html
  • 一个webpack打包时的入口js文件:main.js
  • 一个根vue组件,作为其他组件的挂载点:app.vue

接下来 我们就创建两个自定义组件:index.vue和hello.vue。我们希望的结果是他们之间互相跳转。
我们利用官方提供的脚手架vue-cli工具生成简单的一个基于webpack打包的vue项目
准备工作:

  1. npm install webpack –g
  2. npm install vue-clig
  3. //打开要创建的项目路径目录,创建项目
  4. vue init webpack-simple <项目名>
  5. cd <项目名>
  6. npm install vue-router save
  7. npm run dev

生成的vue项目如下图:

一、使用路由

  1. 首先在目录下创建components文件夹,然后再创建index.vue和hello.vue文件
    1. //index.vue
    2. <template>
    3. <div>
    4. <h2>Index</h2>
    5. <hr>
    6. <p>{{sContent}}</p>
    7. </div>
    8. </template>
    9. <script>
    10. export default{
    11. data(){
    12. return {
    13. sContent:“This is index components”
    14. }
    15. }
    16. }
    17. </script>
    1. //hello.vue
    2. <template>
    3. <div>
    4. <h2>Hello Vue.js</h2>
    5. <hr/>
    6. <p>{{sContent}}</p>
    7. </div>
    8. </template>
    9. <script>
    10. export default{
    11. data(){
    12. return {
    13. sContent:“This is hello components”
    14. }
    15. }
    16. }
    17. </script>
  2. 修改main.js文件
    1. //引入并安装vue-router插件
    2. import Vue from ‘vue’;
    3. import VueRouter from ‘vue-router’;
    4. Vue.use(VueRouter);
    5. //引入index.vue和hello.vue组件
    6. import App from ‘./App.vue’;
    7. import index from ‘./components/index.vue’;
    8. import hello from ‘./components/hello.vue’;
    9. //定义路由
    10. const routes = [
    11. {path:‘/’,component:App},
    12. { path: ‘/index’, component: index },
    13. { path: ‘/hello’, component: hello }
    14. ]
    15. //创建 router 实例,然后传 routes 配置
    16. const router=new VueRouter({
    17. routes
    18. });
    19. //创建和挂载根实例。通过 router 配置参数注入路由,从而让整个应用都有路由功能
    20. new Vue({
    21. el:“#app”,
    22. router
    23. });
  3. 修改App.vue
    1. <template>
    2. <div>
    3. ![](./assets/logo.png)
    4. <h1>{{msg}}</h1>
    5. <ul>
    6. <router-link to=‘/index’ tag=‘li’><a href=“/index”>Index</a></router-link>
    7. <router-link to=‘/hello’ tag=‘li’><a href=“/hello”>Hello</a></router-link>
    8. </ul>
    9. </div>
    10. </template>
  4. 修改index.html
    1. <!DOCTYPE html>
    2. <html lang=“en”>
    3. <head>
    4. <meta charset=“utf-8”>
    5. <title>vue-webpack-simple</title>
    6. </head>
    7. <body>
    8. <div id=“app”>
    9. <router-view></router-view>
    10. </div>
    11. <script src=“/dist/build.js”></script>
    12. </body>
    13. </html><%2

Share.

Comments are closed.