Vue項目框架javascript
new Vue({ el, //要綁定的DOM element data, //要綁定的資料 props, //可用來接收父原件資料的屬性 template, //要解析的模板,能夠是#id , HTML 或某個DOM element 實體 computed, //定義資料的getter 與 setter,即須要計算後才能使用的屬性 components, //定義子元件,可用ES6簡寫法 例如(MyHeader) methods, //定義能夠在元件或樣版內使用的方法 propsData, //存放預設的props 內容,方便測試用 relplace, //要不要用template取代el指向的DOM Element預設爲ture })
v-if
與v-show
最大的差異在於對DOM的操做,v-if會依照條件決定是否將原件渲染至網頁上,並決定時間於材料的監聽是否要綁定至原件或直接銷燬該原件php
v-show
則是一定會產出原件,但以條件來切換css(style)的現實與否,若條件改變頻繁,用v-show
來切換更適合css
再來一張vue1.0
和vue2.0
的對比圖
vue
method
和component
以及slot
<b>methods:</b>
一次加載一個數據 <b>component:</b>
一次加載多個數據,至關於屬性的一個實時計算,若是實時計算裏關聯了對象,那麼當某個值改變的時候,同時會發出實時計算。 <b>slot:</b>
使用slot
分發內容,他的做用主要是爲了讓組件組件以前能夠進行組合(混合父組件的內容和子組件本身的模板,這個過程叫作內容<b>分發</b>)
<slot>
的意思是插槽,插入的內容是從父組件傳進來的,淺顯點說就是提早站好坑,等須要用的時候,在過來用,比如老爹和兒子去吃飯,吃飯前,老爹要去上廁所,讓兒子去佔好餐桌,等老爹回來後,二人在一塊兒吃。<slot>
就是外部調用時,標籤中的內容。若是外部調用時沒有提供內容的話,那麼它就會使用本身默認的內容。舉一個例子說明:java
<template> <div> <slot name="CPU">這兒插你的CPU</slot> <slot name="GPU">這兒插你的顯卡</slot> </div> </template>
假設有個組件computerpython
<template> <computer> <div slot="CPU">Intel Core i7</div> <div slot="GPU">GTX980Ti</div> </computer> </template>
beforecreate:這個Vm 在實例化以後 就是剛生下來 beforeCreate: function(){}
ios
create:這裏已經完成了 數據觀測 屬性和方法 的運算 事件回調 created: function(){}
axios
掛載:
beforemount:掛載以前使用 掛載就是 $el
屬性不能用 beforeMount: function(){}
api
mount:掛載到實例上了,原有的 el 被新建立的vm.$el
替換了 mounted: function(){}
數組
DOM:
beforeupdated:當數據更新時調用 beforeUpdate: function(){}
updated:因爲數據的修改,虛擬DOM 從新渲染和打補丁 這個以後調用該鉤子 updated: function(){}
Vue父子級的傳值
一、 父頁面向子頁面傳值
①例如:
<editmerchant v-ref:profile></editmerchant>
父頁面經過賦值
self.$refs.profile.items = items[i];
把父頁面的值放到items中存儲,
(注:在一個父頁面中有多個v-ref
時,profile是你能夠定義的名字,可是注意要和$refs調用的名稱保持一致。)
在子頁面中直接調用items的方法屬性便可。可是必須在初始化數據的時候return items: {}
,
export default { data() { return { items:{} } }, }
否則沒有預期效果哦~
②在父頁面中綁定事件,調用子頁面的方法,子頁面經過props來觸發。
父:<editamount v-ref:profile2 :msginfo="msgInfo" ></editamount>
子:
二、子頁面向父頁面傳值(子頁面修改完成,父頁面的數據不刷新獲得更新)
父頁面經過v-on
綁定對應的事件
<editgoods v-ref:profile v-on:parentinfo="search"></editgoods>
子頁面使用$emit
這樣就實現了子頁面傳值給父頁面啦~
若是是涉及到後臺管理的系統開發,這個多半都會用到~這裏會介紹兩種方法來實現,不過都大同小異:
1(第一種)、
① 導入
導入是經過表單來作的,因此必需要使用FormData(使用FormData的最大優勢就是咱們能夠異步上傳一個二進制文件。)
②導出
1.若是是get方式能夠直接把下載的連接寫到href裏面如:<a href=」xxx.com」></a>
這種方式的侷限性是不適合傳不少參數。
2.能夠經過form表單解決
傳遞不少個參數,就這樣實現O(∩_∩)O(截圖部分是主要代碼)
二、(第二種)
① 上傳
axios.get('http://10.1.5.217:8080/api/loanRace/excelDownload').then( res => { console.log(res); }) api.excelExport().then( res =>{ if(res.errcode == "00000000"){ console.log(res.datas); this.tableData = res.datas; } })
import axios from 'axios'
export default { baseURL: axios.defaults.baseURL, //TODO.... }
importInfo:function() { var file = document.getElementById('upload'); //e.currentTarget.files 是一個數組,若是支持多個文件,則須要遍歷 // var name=e.currentTarget.files[0]; // var params = new FormData(name); var formData = new FormData(file[0]); console.log(formData); api.excelConfirm(formData).then( res =>{ console.log(res); if(res.errcode == "00000000"){ this.tableData = res.datas; } }); }
importInfo:function() { var file = document.getElementById('upload'); //e.currentTarget.files 是一個數組,若是支持多個文件,則須要遍歷 // var name=e.currentTarget.files[0]; // var params = new FormData(name); console.log(file.files[0]); //獲取當前的文件 var params = new FormData(); //通常數據都放在form表單裏 params.append('file',file.files[0]); //excelConfirm()上傳的接口 api.excelConfirm(params).then( res =>{ console.log(res); // if(res.errcode == "00000000"){ // this.tableData = res.datas; // } }); }
上傳執行結果:
②下載
由於下載的方式是get請求,不涉及到傳不少參數的問題,因此這裏直接能夠用a連接就能夠下載,如:
<a v-bind:href="downloadUrl" class="downloadExcel">下載Excel</a>
exportInfo:function() { window.location.href = this.downloadUrl; }