npm install vuex --save
index.js
javascript
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) import state from './state' import actions from './actions' import mutations from './mutations' import getters from './getters' export default new Vuex.Store({ state, actions, mutations, getters })
state.js
css
state訪問狀態對象html
export default { isLogin: false, }
mutations.js
vue
cookie能夠用網上的都不要緊java
import tools from '../assets/js/tools.m.js'; export default { loginOut(state){ //退出登陸 state.isLogin = false; tools.cookie.remove('user'); }, setLoginState(state){ //修改登陸狀態 state.isLogin = true; } }
getters.js
jquery
getters計算過濾操做webpack
export default { isLogin(state){ return state.isLogin; } }
action.js
web
actions異步修改狀態vue-router
export default { }
import Vue from 'vue' import router from './router' import store from './store' import App from './App.vue' new Vue({ el: '#app', store, router, render: h => h(App) });
<template> <div id="app"> <router-view></router-view> </div> </template> <script> import { mapMutations } from 'vuex'; export default { name: "app", data() { return { }; }, created(){ var user = tools.cookie.get('user'); if(user){ this.setLoginState(tools.jsonParse(user)); } }, methods:{ ...mapMutations(['setLoginState']) } }; </script> <style lang="less"> </style>
下面代碼就是cookie用戶狀態,修改,給cookie一個時間期限vuex
<script> import {mapMutations} from 'vuex; export default{ methods: { loginData(){//登陸點擊事件 //...登陸過程 //最後 var expires = new Date(); expires.setTime(expires.getTime() + 7*24*60*60*1000); tools.cookie.set("user",tools.toJson(true),expires.toGMTString());//tools.toJson(true)(true)能夠保存用戶信息如今我還沒接,接口就用true替代 that.setLoginState(true); } } ...mapMutations(['setLoginState']) } </script>
<script> import { mapGetters,mapMutations } from 'vuex' export default{ methods: { signOut(){//退出點擊事件 this.loginOut(); }, ...mapMutations(['loginOut']) } } </script>
npm install echarts --save
import echarts from 'echarts' //引入echarts Vue.prototype.$echarts = echarts //引入組件
柱狀圖
<div id="myChart" :style="{width: '300px', height: '300px'}"></div>
js
<script> export default { name: 'eCharts', data () { return { } }, mounted(){ this.drawLine(); }, methods: { drawLine(){ // 基於準備好的dom,初始化echarts實例 var myChart = this.$echarts.init(document.getElementById('myChart')) // 繪製圖表 myChart.setOption({ title: { text: '在Vue中使用echarts' }, tooltip: {}, xAxis: { data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"] }, yAxis: {}, series: [{ name: '銷量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] }); } } } </script>
main.js
//引入基本模板 let echarts = require('echarts/lib/echarts') // 引入餅狀圖組件 require('echarts/lib/chart/pie') // 引入提示框和title組件,圖例 require('echarts/lib/component/tooltip') require('echarts/lib/component/title') require('echarts/lib/component/legend') Vue.prototype.$echarts = echarts //引入組件
This is an 原文地址:
<!-- 爲 ECharts 準備一個具有大小(寬高)的 DOM --> <div id="main" style="height:400px;margin-top: 100px;"></div>
js
<script> // 引入 ECharts 主模塊 let echarts = require('echarts/lib/echarts'); // // 引入折線圖 require('echarts/lib/chart/line'); // // 引入提示框和標題組件 require('echarts/lib/component/tooltip'); require('echarts/lib/component/title'); require('echarts/lib/component/legend'); require('echarts/lib/component/toolbox'); export default{ mounted() { this.drawLine(); }, methods:{ // 折線圖 drawLine(){ //基於準備好的dom,初始化echarts實例 var myChart = echarts.init(document.getElementById('main')) myChart.setOption ({ title: { text: '折線圖堆疊' }, tooltip: { trigger: 'axis' }, // 圖例--折線提示 legend: { data:['郵件營銷','聯盟廣告'] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, // 右上角的工具箱(下載) toolbox: { feature: { saveAsImage: {} } }, // 折線底部 xAxis: { type: 'category', boundaryGap: false, data: ['週一','週二','週三','週四','週五','週六','周天'] }, // 左側單位 yAxis: { type: 'value', axisLabel: { formatter: '{value} (份)'//更改y軸單位,不要就不用寫 } }, // 數據 series: [ { name:'郵件營銷', type:'line', stack: '總量', data:[120, 132, 101, 134, 90, 230, 210] }, { name:'聯盟廣告', type:'line', stack: '總量', data:[220, 182, 191, 234, 290, 330, 310] } ] }) } } } </script>
經過監聽事件
document.addEventListener('click',function(e){ if(e.target.className!='usermessage'){ that.userClick=false; } })
給最外層的div加個點擊事件 @click="userClick=false"
給點擊的元素上面加上:@click.stop="userClick=!userClick"
This is an 原文地址:
this.$el是在mounted中才會出現的
mounted() { document.addEventListener('click', this.handleDocumentClick); document.addEventListener('touchstart', this.handleDocumentClick);//移動 }, methods: { handleDocumentClick(e) { if (!this.$el.contains(e.target)) { this.isShow = false; } } }
this.$refs
<template> <div ref="box"> <div @click="isShow"></div> </div> </template> mounted(){ let that=this; document.addEventListener('click',function(e){ if(that.$refs.box && !that.$refs.box.contains(e.target)){ that.show = false; } }) }, methods:{ isShow:function(){ this.show=true } }
npm i element-ui -S
在main.js中寫入一下內容
import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import App from './App.vue'; Vue.use(ElementUI); new Vue({ el: '#app', render: h => h(App) });
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ mode: 'history', routes: [ { path: '/', component: resolve => require(['@/views/index.vue'],resolve), redirect: 'home', children:[ { path: '/home', component: resolve => require(['@/views/home.vue'],resolve) }, { path: '/user', component: resolve => require(['@/views/user.vue'],resolve), children: [ { path: 'login', component: resolve => require(['@/components/user/login.vue'],resolve) }, { path: 'logout', component: resolve => require(['@/components/user/logout.vue'],resolve) } ] } ] } ] })
路由配置
import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ mode: 'history', routes: [ { path: '/text', component: resolve => require(['@/views/text.vue'],resolve), children: [ { path: 'trend1', name: 'trend1', component: resolve => require(['@/components/text/trend1.vue'],resolve) }, { path: 'task1', name: 'task1', component: resolve => require(['@/components/text/task1.vue'],resolve) } ] } ] });
views文件夾
新建text.vue
<template> <div class="text" > <el-aside width="190px"> <Side /> </el-aside> <el-main > <router-view></router-view> </el-main> </div> </template> <script> //組件 import Side from '../components/text/side.vue' export default { name: 'text', data() { return{ } }, components: { Side } } </script> <style lang="less"> .el-aside { float: left; } </style>
components文件夾
side.vue
<template> <el-row class="sidebar" style="width: 190px;"> <el-col> <el-menu class="el-menu-vertical-demo" :default-active="activeIndex" router :default-openeds="openeds" @open="handleOpen" @close="handleClose"> <el-submenu index="1"> <template slot="title"> <i class="iconfont icon-qushifenxi"></i> <span>用戶設置</span> </template> <el-menu-item-group> <el-menu-item index="/text/trend1">我的中心</el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="2"> <template slot="title"> <i class="iconfont icon-renwuguanli"></i> <span>任務管理</span> </template> <el-menu-item-group> <el-menu-item index="/text/task1">任務信息</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu> </el-col> </el-row> </template> <script> export default { data() { return { tabPosition: 'left', openeds: ['1','2','3'] } }, computed:{ activeIndex(){ return this.$route.path.replace('/','') } }, methods: { handleOpen(key, keyPath) { console.log(key, keyPath); }, handleClose(key, keyPath) { console.log(key, keyPath); } } } </script>
task1.vue
<template> <div> 任務信息內容 </div> </template> <script> export default { name: 'task1', data() { return { } } } </script>
trend1.vue
<template> <div> 我的中心內容 </div> </template> <script> export default { name: 'trend1', data() { return { } } } </script>
栗子
var ws = new WebSocket('wss://echo.websocket.org'); ws.onopen = function(evt) { console.log('Connection open ...'); ws.send('Hello WebSockets!'); }; ws.onmessage = function(evt) { console.log('Received Message: ' + evt.data); ws.close(); }; ws.onclose = function(evt) { console.log('Connection closed.'); };
子組件
<input v-model.trim="msg" ref="msg"> data(){ return { msg: '' } }
父組件
<inputValue ref="getInput" /> <button @click="getMsg"></button> methods:{ getMsg(){ console.log(this.$refs.getInput.msg) } }
注意儘可能少用ref
html
<div class="test-content"> <div class="test-group" v-for="(value,key) in testList"> <item class="item-left">{{value}}</item> <div class="item-right">{{testAjax[key]}}</div> </div> </div>
less
.test-content { width: 300px; margin-top: 100px; border: 1px solid #000; .test-group { height: 45px; line-height: 45px; padding: 0 20px; box-sizing: border-box; border-bottom: 1px solid #000; &:last-of-type{ border-bottom: none; } .item-left,.item-right { display: inline-block; } .item-left { float: left; } .item-right { float: right; } } }
js
data() { return { testList:{ id: 'ID', address: '地址', sex: '性別', name: '姓名', phone: '電話', }, testAjax: { id: '100010', address: '上海靜安區', sex: '男', name: '哈哈哈', phone: '12345678985', } } }
<template> <el-table :data="tableData" style="width: 1000px;margin: 100px auto;" border > <el-table-column v-for="(item,index) in items" :prop="item.prop" :label="item.label" > </el-table-column> </el-table> </template> <script> export default { name: "news", data() { return { items: [ { prop: 'date', label: '日期' }, { prop: 'name', label: '姓名' }, { prop: 'address', label: '地址' } ], tableData: [{ date: '2018-05-02', name: '王大虎', address: '上海市靜安區高平路 1518 弄' }, { date: '2018-12-25', name: '王二虎', address: '上海市楊浦區金沙江路 563 弄' }, { date: '2018-10-01', name: '王三虎', address: '上海市浦東新區哈哈路 799 弄' }, { date: '2019-01-28', name: '王小虎', address: '上海市普陀區金沙江路 1516 弄' }] }; }, created() { }, } </script> <style> </style>
expand-row-keys:能夠經過該屬性設置 Table 目前的展開行,須要設置 row-key 屬性才能使用,該屬性爲展開行的 keys 數組。
type="expand"效果圖
<template> <el-table :data="tableData" style="width: 1000px;margin: 100px auto;" :row-key='getRowKeys' :expand-row-keys="dataindex" border > <el-table-column v-for="(item,index) in items" :prop="item.prop" :label="item.label" > </el-table-column> <el-table-column type="expand" label="點擊" > <template slot-scope="props"> 我是展開行 </template> </el-table-column> <el-table-column label="操做" > <template slot-scope="scope"> <el-button round size="mini" @click="myClickLook(scope.$index, scope.row)" >查看</el-button> <el-button round size="mini" @click="myClickCommand(scope.$index, scope.row)" >命令</el-button> </template> </el-table-column> </el-table> </template> <script> export default { name: "news", data() { return { dataindex:[], getRowKeys (row) { return row.id; }, items: [ { prop: 'date', label: '日期' }, { prop: 'name', label: '姓名' }, { prop: 'address', label: '地址' } ], tableData: [{ id: 0, date: '2018-05-02', name: '王大虎', address: '上海市靜安區高平路 1518 弄' }, { id: 1, date: '2018-12-25', name: '王二虎', address: '上海市楊浦區金沙江路 563 弄' }, { id: 2, date: '2018-10-01', name: '王三虎', address: '上海市浦東新區哈哈路 799 弄' }, { id: 3, date: '2019-01-28', name: '王小虎', address: '上海市普陀區金沙江路 1516 弄' }] }; }, methods: { myClickLook(index,row) { this.dataindex = []; this.dataindex.push(index); console.log(this.dataindex); }, myClickCommand(index,row) { this.dataindex = []; this.dataindex.push(index); } }, created() { }, } </script> <style> .el-table__expand-icon:after { content: '查看'; color: #42c4fe; cursor:pointer; } .el-table__expand-icon--expanded { transform: rotate(0deg); } .el-table__expand-icon--expanded:after { content: '收起'; color: #42c4fe; cursor:pointer; } .el-table__expand-icon>i { display: none !important; } </style>
<el-table :data="tableData" style="width: 1000px;margin: 100px auto;" :row-key='getRowKeys' :expand-row-keys="dataindex" :span-method="objectSpanMethod" border ></el-table> <script> methods: { objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { //用於設置要合併的列 if (rowIndex % 2 === 0) { //用於設置合併開始的行號 // return { // rowspan: 2, //合併的行數 // colspan: 1 //合併的列數,設爲0則直接不顯示 // }; return [2,1] } else { return [0,0] } } } } </script>
常常用於數組的循環遍歷
let arr = ['蘋果','香蕉','梨']; for (let i=0; i<arr.length; i++){ console.log(i,arr[i]) } // 0 "蘋果" // 1 "香蕉" // 2 "梨"
for in循環主要用於遍歷普通對象
let obj = { name: '張三', age: 18, sex: '男' } for(let key in obj){ console.log(key, obj[key]); } // name 張三 // age 18 // sex 男
只要指定條件爲 true,循環就能夠一直執行代碼。
let cars = ['蘋果','香蕉','梨','橘子']; var i = 0; while(cars[i]){ console.log(cars[i]); i++; } // 蘋果 // 香蕉 // 梨 // 橘子
do while循環是while循環的一個變體,它首先執行一次操做,而後才進行條件判斷,是true的話再繼續執行操做,是false的話循環結束
let i = 5; do { console.log(i); i--; } while(i > 3) //5 //4
注意: forEach() 對於空數組是不會執行回調函數的。
let arr = ['蘋果','香蕉','梨']; arr.forEach(function(i,index){ console.log(i,index); }) // 蘋果 0 // 香蕉 1 // 梨 2
map 和 forEach 方法都是隻能用來遍歷數組,不能用來遍歷普通對象。
let arr = ['蘋果','香蕉','梨']; let tt = arr.map(function(i){ console.log(i); }) // 蘋果 // 香蕉 // 梨
filter 方法是 Array 對象內置方法,它會返回經過過濾的元素,不改變原來的數組。
let arr = [1,2,3]; let tt = arr.filter(function(i){ return i > 1; }) console.log(tt); //[2, 3]
some()方法用於檢測數組中的元素是否知足條件(函數提供),返回boolean值,不改變原數組
let arr = [1,2,3]; let tt = arr.some(function(i){ return i > 1; }) console.log(tt);//true
every() 方法用於檢測數組全部元素是否都符合指定條件(經過函數提供),返回 boolean 值,不改變原數組。
let arr = [1,2,3]; let tt = arr.every(function(i){ return i > 1; }) console.log(tt);//false
reduce()方法接收一個函數做爲累加器,數組中的每一個值(從左到右)開始縮減,最終計算爲一個值
let arr = [1,2,3]; let add = arr.reduce(function(i,j){ return i+j; }) console.log(add);//6
reduceRight()方法和reduce功能是同樣的,它是從數組的末尾處向前開始計算
let arr = [1,2,3]; let add = arr.reduceRight(function(i,j){ return i+j; }) console.log(add);//6
十二、for of 循環
let arr = ['蘋果','香蕉','梨']; for(let i of arr){ console.log(i); } // 蘋果 // 香蕉 // 梨
This is an 原文地址:
npm install jquery --save
const webpack = require('webpack'); module.exports = { resolve: { alias:{ 'jquery': 'jquery } }, plugins:[ new webpack.optimize.CommonsChunkPlugin('common.js'); new webpack.ProvidePlugin({ $:"jquery", jQuery:"jquery", "windows.jQuery":"jquery" }) ] }
import $ from 'jquery'
html
<div class="cell" v-for="item in items"> <div :class="item.state == 1 ? 'state-green' : item.state == 0 ? 'state-orange' : 'state-red'">{{item.title}}</div> </div>
js
data() { return { // 1是運行0是暫停-1是終止 items: [ { title: '運行', state: 1 }, { title: '暫停', state: 0 }, { title: '終止', state: -1 } ] } }
css
.cell { .state-green { color: #67C23A; } .state-orange { color: #E6A23C; } .state-red { color: #F56C6C; } }
el-table-column使用v-show時不支持換成v-if可達到目的
<el-table-column v-if="isShow"></el-table-column>
在父組件中給子組件綁定一個原生的事件,就將子組件變成了普通的HTML標籤,不加'. native'事件是沒法觸 發的。
<Senior class="senior-right" @click="getClick" /> <Senior class="senior-right" @click.native="getClick" />