vue-cli工具-路由&swiper插件&Echarts使用

一、路由(Vue Router)

Vue Router 是 Vue.js (opens new window)官方的路由管理器。包含的功能有:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于 Vue.js 过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的 CSS class 的链接
  • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
  • 自定义的滚动条行为

1、安装

       npm install vue-router

2、导入(入口文件main.js中)

      import Vue from 'vue'
      import VueRouter from 'vue-router'
       Vue.use(VueRouter)

3、创建路由器

路由器就是配置路由信息的,所谓路由就是把它当成一个页面的跳转。通过路由器对象配置
(1)创建路由器对象 (在入口文件main.js中)

// 导入页面组件
   import Home from './pages/Home.vue'
   import List from './pages/List.vue'
   const router = new VueRouter({
            // 定义路由信息数组
            routes:[
           // 每一条路由信息,就是一个对象
                   {
                         // 路由路径
                         path:'/home',
                         // 路由名称
                         name:'home',
                         // 路由组件
                         component:Home       //Home是组件名
                    },
            ]
   })

在路由器对象中需要配置跳转页面。(注意:所有页面的每一个页面组件都单独用一个文件夹保存,在src目录中创建一个views或pages文件夹)
src目录中的components和pages都是组件文件夹,前者为业务组件,后者为页面组件
在pages文件夹中添加组件

image.png

当我们在开发项目时,可能会有很多需要跳转的页面,导致入口文件main.js中的代码增多。在开发项目过程中main.js文件要尽可能的小,所以我们要把部分的代码分离出去。
在src目录新建一个文件夹,一般命名为router,然后新建一个文件index.js。将分离出来的代码接收,再导出

// 导入vue库
import Vue from 'vue'
// 导入路由
import VueRouter from 'vue-router'
// 使用路由
Vue.use(VueRouter)
// 导入Home组件
import Home from '../pages/Home.vue'
// 导入List组件
import List from '../pages/List.vue'
// 创建路由器对象
export default new VueRouter({
  // 定义路由信息数组
  routes:[
    // 每一条路由信息,就是一个对象
    {
      // 路由路径
      path:'/home',
      // 路由名称
      name:'home',
      // 路由组件
      component:Home
    },
    {
      // 路由路径
      path:'/list',
      // 路由名称
      name:'list',
      // 路由组件
      component:List
    },
  ]
})

注意:main.js中的代码被分离之后,需要在里面重新导入(一个文件夹中的index.js文件可以省略),文件中的组件地址也需要改动

4、配置路由器

  import router from './router'
  new Vue({
     render: h => h(App),
     // 将路由器对象传给vue实例
     router     // 简写,相当于router:router
   }).$mount('#app')

5、使用路由

(1)路由组件跳转
router-link是路由链接组件,用于跳转路由。通过传入 to 属性指定链接, 即要显示的内容。router-link默认会被渲染成一个 <a> 标签。
router-view是路由视图组件,用于呈现路由页面。

<template>
  <div id="app">
      <router-link to="/home">首页</router-link>&nbsp;
      <router-link to="/list">列表</router-link>&nbsp;
      <router-view></router-view>
  </div>
</template>

(2)编程式路由跳转
编程式路由跳转,可以在跳转之前,做各种验证,比如判断权限等等。
route返回的是当前路由信息。router是当前vue实例里面的路由器对象。
push方法:用于跳转路由,在浏览器的历史记录中,添加一个路由信息。需要注意,不能反复push同一个路由地址。
replace方法:也是用于跳转路由。它用当前地址替换历史记录里面的最近一条地址。

<template>
  <div id="app">
    <button @click="gotoAbout">关于</button>&nbsp;
    <button @click="gotoNews">新闻</button>
  </div>
</template>
<script>
export default {
  name: 'App',
  methods: {
    gotoAbout(){
      if(this.$route.path!=='/about'){
        this.$router.push('/about')
      }
    },
    gotoNews(){
      if (this.$route.path!=='/news') {
        this.$router.push('/news')
      }
    }
  },
}
</script>

二、swiper插件

1、安装

   npm install swiper@5 vue-awesome-swiper@4

2、导入

(1)全局导入

// 导入swiper
import VueAwesomeSwiper from 'vue-awesome-swiper'
// 导入swiper的样式
import 'swiper/css/swiper.css'
// 因为swiper是插件,所以要use
Vue.use(VueAwesomeSwiper)

(2)局部导入

// 导入swiper的组件
import { Swiper, SwiperSlide } from 'vue-awesome-swiper'
// 导入swiper的样式
import 'swiper/css/swiper.css'
export default {
    // 注册组件
    components: {
        Swiper,
        SwiperSlide
    }
}

3、使用

<swiper :options="swiperOptions">
    <swiper-slide>
        <img src="http://p1.music.126.net/Y6gItVxUvkbvI2cC8KVZYA==/109951166461233203.jpg?imageView&quality=89">
    </swiper-slide>
    <swiper-slide>
        <img src="http://p1.music.126.net/ypjEcAl-BXKqb2UWdau-Tw==/109951166463199078.jpg?imageView&quality=89">
    </swiper-slide>
    <swiper-slide>
        <img src="http://p1.music.126.net/_7zX4BjboCYo4KYRvpayDg==/109951166461246383.jpg?imageView&quality=89">
    </swiper-slide>
    <swiper-slide>
        <img src="http://p1.music.126.net/3Vwphalm49ewNV-lIJUBNA==/109951166461279853.jpg?imageView&quality=89">
    </swiper-slide>
    <!-- 分页器 -->
    <div class="swiper-pagination" slot="pagination"></div>
    <!--左箭头。如果放置在swiper-container外面,需要自定义样式。-->
    <div class="swiper-button-prev" slot="button-prev"></div>
    <!--右箭头。如果放置在swiper-container外面,需要自定义样式。-->
    <div class="swiper-button-next" slot="button-next"></div>
</swiper>
data() {
    return {
        // 定义swiper的配置选项
        swiperOptions: {
            // 指定分页器
            pagination: {
                //指定分页器的容器
                el: ".swiper-pagination",
                //点击分页器的指示点分页器会控制Swiper切换
                clickable:true
            },
            // 配置衔接滑动
            loop:true,
            // 配置自动播放
            // autoplay:true
            autoplay:{
                //自动播放
                autoplay:true,
                //设置间隔时间
                delay:3000,
                // 用户操作swiper之后,是否禁止autoplay
                disableOnInteraction:false
            },
            // slide的切换效果
            effect:'coverflow',
            // 箭头
            navigation:{
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev',
            }
        },
    };
},

三、Echarts使用

1、安装

   npm install echarts --save

2、导入

   import * as echarts from 'echarts';

关闭eslint语法检查

  "eslintConfig": {
    "rules": {
      "no-unused-vars": "off"
    }
  }

3、准备容器

  <div class="charts">
    <h3>使用ECharts</h3>
    <div id="main"></div>
  </div>

4、选择示例图

官方文档:https://echarts.apache.org/examples/zh/index.html
选择合适的图标下载

image.png

5、引入Echarts

于准备好的dom,初始化echarts实例,绘制图表。因为该项目是基于vue,所以需要在mounted生命周期中进行这一步(获取dom,需要在页面挂载完成后进行)。
(1)折线图示例

import * as echarts from "echarts";
export default {
  name: "List",
  mounted() {
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById("container"));
    myChart.setOption({
      title: {
        text: 'Stacked Line'
      },
      tooltip: {
        trigger: 'axis'
      },
      legend: {
        data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
      },
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      toolbox: {
        feature: {
          saveAsImage: {}
        }
      },
      xAxis: {
        type: 'category',
        boundaryGap: false,
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
      },
      yAxis: {
        type: 'value'
      },
      series: [
         {
          name: 'Email',
          type: 'line',
          stack: 'Total',
          data: [120, 132, 101, 134, 90, 230, 210]
        },
        {
          name: 'Union Ads',
          type: 'line',
          stack: 'Total',
          data: [220, 182, 191, 234, 290, 330, 310]
        },
        {
          name: 'Video Ads',
          type: 'line',
          stack: 'Total',
          data: [150, 232, 201, 154, 190, 330, 410]
        },
        {
          name: 'Direct',
          type: 'line',
          stack: 'Total',
          data: [320, 332, 301, 334, 390, 330, 320]
        },
        {
          name: 'Search Engine',
          type: 'line',
          stack: 'Total',
          data: [820, 932, 901, 934, 1290, 1330, 1320]
        }
      ],
    });
  },
}

实现效果:
image.png

(2)柱状图示例
通过axios获取后台数据。(注意:axios需要先安装,再导入)

// 导入axios
import axios from "axios";
export default {
  name: "Test",
  data() {
    return {
      // 定义一份数据
      list: [],
    };
  },
  methods: {
    // 加载数据的方法
    async getList() {
      // 向后台发送请求,获取一份数据
      let {data} = await axios.get("data/data2.json");
      this.list = data
      this.showdata()
    },   
    // 渲染数据的方法
    showdata() {
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById("main"));
      // 绘制图表
      myChart.setOption({
        title: {
          text: "产品销售信息",
          // 副标题
          subtext: "2021-12-08",
        },
        // 图例组件
        legend: {},
        tooltip: {},
        // X轴信息
        xAxis: {
          // 产品名称数据作为X轴信息展示
          data: this.list.map((r) => r.title),
        },
        // Y轴信息
        yAxis: {},
        // 系列
        series: [
          {
            name: "销量",
            type: "bar",
            data: this.list.map((r) => r.xl),
          },
          {
            name: "库存",
            type: "bar",
            data: this.list.map((r) => r.kc),
          },
        ],
      });
    },
  },
  // 页面挂载完成
  mounted() {
    this.getList();
  },
};
[
    {
        "title": "衬衫",
        "xl": 5,
        "kc": 9
    },
    {
        "title": "羊毛衫",
        "xl": 20,
        "kc": 19
    },
    {
        "title": "雪纺衫",
        "xl": 36,
        "kc": 55
    },
    {
        "title": "裤子",
        "xl": 10,
        "kc": 2
    },
    {
        "title": "高跟鞋",
        "xl": 10,
        "kc": 5
    },
    {
        "title": "袜子",
        "xl": 20,
        "kc": 35
    }
]

实现效果:
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,423评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,339评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,241评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,503评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,824评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,262评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,615评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,337评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,989评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,300评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,829评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,193评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,753评论 3 230
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,970评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,708评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,295评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,207评论 2 258

推荐阅读更多精彩内容