不多说上代码:

<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>Element UI简单Cascader级联选择器使用</p>
<el-cascader :options='options' v-model="selectedOptions" @change="handleChange">
</el-cascader>
<div class="select_box">
<p>mockjs的数据Element UI的select组件做的二级联动效果</p>
<el-select v-model="shopRegoin" placeholder="请选择" @change="selectShopRegoin">
<el-option v-for="item in shopList" :key="item.type" :label="item.shop" :value="item.type">
</el-option>
</el-select>
<el-select v-model="shopName" placeholder="请选择">
<el-option v-for="item in shopNameList" :key="item.type" :label="item.shop" :value="item.type">
</el-option>
</el-select>
</div>
<!-- 去下一个页面 -->
<div class="btn_box select_box">
<el-button type="primary" @click="goNextPage">去下一个页面看看</el-button>
</div>
</div>
</template>
<script>
import { cityList } from '../netconnet/api'
export default {
name: 'HelloWorld',
data() {
return {
msg: 'hello,vuejs',
selectedOptions: [],
options: [], //级联数据
shopRegoin: '',
shopName: '',
shopList: [], //门店区域
shopNameList: [], //门店名字
}
},
created() {
this.getList()
this.getMockData()
this.postMockData()
},
methods: {
//es6写法
async getList() {
try {
let res = await cityList(null)
console.log(res)
this.$eleMessage('数据成功返回', 'success', 500)
} catch (e) {
console.log(e)
}
//原始写法
// cityList(null).then(res=>{
// console.log(res,'res')
// }).catch(err=>{
// console.log(err,'err')
// })
},
//change事件
selectShopRegoin(val) {
console.log(val, 'val')
let vIndex = this.shopList.findIndex(e => {
return e.type == val
})
this.shopNameList = this.shopList[vIndex].shopNameList; //二级联动的数组;
this.shopName = this.shopNameList[0].type;
console.log(this.shopNameList, 'this.shopNameList')
},
//模拟mock get请求
getMockData() {
this.$http.get('/getshop/list').then(res => {
this.shopList = res.data.data.shopList;
console.log(res, 'getMock数据')
this.$eleMessage('get的mock数据成功返回', 'success', 1500)
})
},
//模拟mock post请求
postMockData() {
let data = {
type: 'see',
key: '123456789'
}
this.$http.post('/postshop/list', data).then(res => {
// 级联选择
this.options = res.data.data.shopList.map(e => {
return {
value: e.type,
label: e.shop,
children: e.shopNameList.map(i => {
return {
value: i.type,
label: i.shop
}
})
}
})
console.log(res.data, 'postMock数据')
this.$eleMessage('post的mock数据成功返回', 'success', 3000)
})
},
handleChange(val) {
console.log(val, '值');
},
//vue 跳转
goNextPage() {
//1.push方式可以产生历史记录
this.$router.push({
name: 'test',
query: {
age: 20,
sex: '男',
goodName: encodeURI(encodeURI('中文参数转码套两层encodeURI,同理解码decodeURI也套两层'))
}
})
//2.用replace的方式不会产生历史记录
// this.$router.replace({
// name:'test',
// query:{
// age:20,
// sex:'男',
// goodName:encodeURI(encodeURI('中文参数转码套两层encodeURI'))
// }
// })
}
}
} </script>
<style scoped>
.select_box {
margin-top: 30px;
} </style>

2.mockjs使用方法 npm/cnpm  install mockjs -S 具体参照官网(我这里给出的是快捷使用快捷配置方法)新建一个文件夹mock新建一个mockjs文件如下:

// 使用 Mock
import Mock from 'mockjs'; // 配置 Mock 路径
require.config({
paths: {
mock: 'http://mockjs.com/dist/mock'
}
})
// mock一组数据
const shopData = {
"code": 0,
"data": {
"mockObj":{
"tip":'hello,我教你手把手玩mockjs',
"date":'2018-11-30'
},
"shopList": [{
"type": 1,
"shopNameList": [{
"type": 1,
"shopNameList": [],
"shop": "母婴店1"
},
{
"type": 2,
"shopNameList": [],
"shop": "母婴店2"
},
{
"type": 3,
"shopNameList": [],
"shop": "母婴店3"
},
{
"type": 4,
"shopNameList": [],
"shop": "母婴店4"
},
{
"type": 5,
"shopNameList": [],
"shop": "母婴店5"
},
{
"type": 6,
"shopNameList": [],
"shop": "母婴店6"
},
{
"type": 7,
"shopNameList": [],
"shop": "母婴店7"
},
{
"type": 8,
"shopNameList": [],
"shop": "母婴店8"
},
{
"type": 9,
"shopNameList": [],
"shop": "母婴店9"
},
],
"shop": "南山分店"
},
{
"type": 2,
"shopNameList": [{
"type": 10,
"shopNameList": [],
"shop": "烧烤店1"
},
{
"type": 11,
"shopNameList": [],
"shop": "烧烤店2"
},
{
"type": 12,
"shopNameList": [],
"shop": "烧烤店3"
},
{
"type": 13,
"shopNameList": [],
"shop": "烧烤店4"
}
],
"shop": "宝安分店"
},
{
"type": 3,
"shopNameList": [{
"type": 14,
"shopNameList": [],
"shop": "酒店1"
},
{
"type": 15,
"shopNameList": [],
"shop": "酒店2"
}
],
"shop": "罗湖分店"
},
{
"type": 4,
"shopNameList": [{
"type": 16,
"shopNameList": [],
"shop": "按摩店1"
},{
"type": 17,
"shopNameList": [],
"shop": "按摩店2"
}],
"shop": "福田分店"
}
]
},
"msg": "请求成功"
} // Mock.mock( url, post/get , 返回的数据);此处可以模拟post和get 请求
Mock.mock('/postshop/list', 'post', shopData); Mock.mock('/getshop/list', 'get', shopData);

3.mainjs如下:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'
Vue.prototype.$http = axios;
require('./mock/mock.js')
Vue.use(ElementUI); //element Message全局配置组件调用 this.$eleMessage('内容','消息类型','持续时间')
Vue.prototype.$eleMessage = function (msg,tip,time) {
this.$message({
message: msg,
type: tip,
duration:time
})
} Vue.config.productionTip = false /* eslint-disable no-new */
new Vue({
el: '#app',
router,
//store,
render: h => h(App)
})

4.接受路由编码后的参数并解码:

<template>
<div class="test_box">
<p>hell,你好</p>
<p>encodeURI编码后转码的路由参数内容----<span style="color: red">({{routerParmas}})</span></p>
</div>
</template>
<script>
export default {
data() {
return {
routerParmas:decodeURI(decodeURI(this.$route.query.goodName)),
}
},
created(){ },
methods:{ }
} </script>

5.路由懒加载三种方式:

import Vue from 'vue'
import Router from 'vue-router'
//方式一:最简单直接的使用组件
//import HelloWorld from '@/components/HelloWorld'
//import Test from '@/components/test' //方式二:webpack自带的模块按需加载 r就是resolve
//const HelloWorld = r => require.ensure([], () => r(require('@/components/HelloWorld')), 'HelloWorld'); Vue.use(Router) const router = new Router({
routes: [
{
path: '/',
name: 'HelloWorld',
component: resolve => require(['@/components/HelloWorld'], resolve)//方式三:懒加载方式
},{
path: '/test',
name: 'test',
component: resolve => require(['@/components/test'], resolve)
}
]
}) export default router;

vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式的更多相关文章

  1. vue+element ui项目总结点(二)table合计栏目,按照起始年份--截止年份 插入数据并向后追加数据以最后一条年份+1

    1.oninput 事件在用户输入时触发; <template> <div class="test_box"> <p>hell,你好</p ...

  2. vue+element ui项目总结点(六)table编辑当前行、删除当前行、新增、合计操作

    具体属性方法参考官方网站:http://element-cn.eleme.io/#/zh-CN/component/installation <template> <div clas ...

  3. vue+element ui项目总结点(四)零散细节概念巩固如vue父组件调用子组件的方法、拷贝数据、数组置空问题 等

    vue config下面的index.js配置host: '0.0.0.0',共享ip (假设你的电脑启动了这个服务我电脑一样可以启动)-------------------------------- ...

  4. vue+element ui项目总结点(三)富文本编辑器 vue-wangeditor

    1.参考 https://www.npmjs.com/package/vue-wangeditor 使用该富文本编辑器 <template> <div class="egi ...

  5. vue+element ui项目总结点(五)Carousel 走马灯组件、Collapse 折叠面板、Tree 树形控件

    <template> <div class="ele_test_box"> <!-- 常用效果 Popover 弹出框组件 具体属性查看官方文档--& ...

  6. vue-cli3项目首页加载速度优化(cdn加速,路由懒加载,gzip压缩)

    今天打算上线vue的单页面项目,上线后,首页加载速度巨慢! 原因是项目上线后,网速不够快,加载js,css等资源很慢, 打开打包好的文件发现chunk-vendors.xxxxxxx.js的包很大,达 ...

  7. vue项目性能优化(路由懒加载、gzip加速、cdn加速)

    前端工程性能优化一说意义深远悠长,本章主要介绍除了一些基础优化外如何实行路由懒加载.Gzip加速.CDN加速,让网页飞的快一些. 基础优化 老生常谈的一些: 不要在模板中写复杂的表达式 慎用watch ...

  8. vue-router路由懒加载(解决vue项目首次加载慢)

    懒加载:----------------------------------------------------? 也叫延迟加载,即在需要的时候进行加载,随用随载. 为什么需要懒加载? 像vue这种单 ...

  9. vue-cli 项目实现路由懒加载

    在vue 单页应用中,如果路由不实现懒加载,那么打包出来的文件将会非常大,加载也会非常慢.vue-router 官网也有相应的介绍,但是具体怎么去实现还是讲的比较模糊的,下面将一步步讲解配置路由懒加载 ...

随机推荐

  1. stl里面的空间适配器

    一般而言,如果频繁地向system heap申请和释放空间很小的内存空间块(小于128B的),就会对系统内存资源产生很多内存碎片(fragment)的问题,而C++的::operator new() ...

  2. WebStorm配置SVN

    下载SVN客户端管理工具TortoiseSVN-1.8.5.25224-x64-svn-1.8.8,选择合适的Windows版本 配置项目目录,对应的VCS为Subversion 设置Subversi ...

  3. hdu(1007) 最近点对 分治法

    最近点对一般想到枚举  ,一一枚举时间复杂度为n^2:枚举时候一些操作是多余的,有了分治算法的思想 ,把一些问题分个击破,再回到整体. 题目链接 以这道题为例,我们可以把他按照x轴的升序分成多个子区域 ...

  4. [Selenium] 搭建 Android WebDriver 环境

    1.安装 Android SDK 到如下网址下载 Android SDK http://developer.android.com/sdk/index.html 2.创建 Android 虚拟设备 解 ...

  5. Watir: 如何处理简单的网页弹出警告框?

    以下是一个很经典的把Watir与AutoIt连接在一起的实例.如果我们对AutoIT了解的更多,处理类似的问题会更加简单.以下实例会判断页面上是否有某“删除”链接,一旦有该链接,就点击,然后点击弹出的 ...

  6. Python实现的一个简单LRU cache

    起因:我的同事需要一个固定大小的cache,如果记录在cache中,直接从cache中读取,否则从数据库中读取.python的dict 是一个非常简单的cache,但是由于数据量很大,内存很可能增长的 ...

  7. error the @annotation pointcut expression is only supported at Java 5

    eclipse搭建环境后报错 the pointcut is supported at Java 5 错误意思大致是:注释切入点表达式只支持在Java 5版本以上,我就纳闷了我安装的是jdk1.8啊, ...

  8. 量子纠缠1——量子比特、Bell态、EPR佯谬

    量子纠缠是量子物理的基本性质,他描述的是:当几个粒子相互作用后,无法单独描述各个粒子的性质,只能整体描述,本文主要介绍两个量子比特之间的纠缠. 量子比特(Qubit) 量子比特是量子计算的基本单位,就 ...

  9. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时2

    课时2 计算机视觉历史回顾与介绍中 1966年是计算机视觉的诞生年. 视觉处理流程的第一步,是对简单的形状结构处理,边缘排列. 边缘决定了结构. David Marr写了一本非常有影响力的书,视觉是分 ...

  10. 家庭wifi,如何组网最合适

    wifi信号通过电磁波在空中传播的,属于微波通信的一种,因为微波本身及发射功率的限制,导致wifi的穿透能力比较差,北方比较厚的承重强,铁门.家具等对都会对wifi信号有较强的削弱作用.穿过的障碍物越 ...