1. 程式人生 > 其它 >常用Vue指令總結

常用Vue指令總結

技術標籤:前端vue.js

v

指令說明
v-model雙向資料繫結,一般用於表單元素
v-for對陣列或物件進行迴圈操作
v-on繫結事件,用法v-on:事件=“函式”
v-show/v-if用來顯示或隱藏元素,v-show是通過display實現,v-if是每次刪除後再重新建立
v-on:簡寫:@
$event包含target,type,offset…

事件物件$event
阻止事件冒泡:
1,原生js,依賴於事件物件,需要呼叫stopPropagation()方法
2,vue方式:@click.stop,不依賴於事件物件
阻止事件預設:
1,原生js:依賴於事件物件,呼叫preventDefault()方法

2,vue方式:不依賴於事件物件,@click.prevent
鍵盤事件:
回車:@keydown.13或@keydown.enter
事件修飾符:

名稱描述
.stop呼叫event.stopPropagation()
.prevent呼叫event.preventDafault()
.{keyCode|keyAlias}只當事件是從特定鍵觸發時才觸發回撥
native監聽元件根元素的原生事件
.once只觸發一次回撥

屬性繫結和簡寫

v-bind用於屬性繫結  語法v-bind:屬性=" 	",簡寫為	:src|

class和style屬性:
繫結class


模板:

​ Vue.js使用基於HTML的模板語法,可以將DOM繫結到Vue例項中的資料

​ 模板就時{{}},用來進行資料繫結,顯示在頁面中,也成為Mustache語法
​ 資料繫結的方式:
​ 1,雙向繫結:v-model
​ 2,單項繫結:a):{{}} 可能會出現閃爍的問題,使用v-cloak 需要結合css [cloak]{display:none}使用
​ b):使用 v-text,v-html

其他指令

​ v-once:資料值繫結一次
​ v-pre:不編譯,直接顯示

過濾器:

​ 簡介:用來過濾模型資料,在顯示之前進行資料處理和篩選
​ 語法:{{data | filter1 | filter2(引數)}}
​ vue1.0中許多內建過濾器,如:currency、uppercase、lowercase、limitby、orderby、filterBy

​ vue2.0中已經廢棄了所有內建過濾器,
​ 如何解決:
​ a,使用第三方工具庫,如loadash,data-fn(日期格式化),accounting.js(對貨幣進行格式化)
​ b,自定義過濾器,

自定義過濾器::

​ 分類:全域性過濾器,區域性過濾器
​ 自定義全域性過濾器:
​ 使用全域性方法:Vue.filter(過濾器ID,過濾器函式)
​ 自定義區域性過濾器:

傳送AJAX請求

​ 簡介:
​ vue本身不支援傳送AJAX請求,需要使用vue-resource、axios【官方推薦,vue2.0】
​ axios是一個基於promise的HTTP請求客戶端,用來發送請求。
​ 基本用法:
​ axios([options])
​ axios.get(url,[options])
​ 傳參:1,通過url傳參
​ 2,通過params傳參
​ axios.post(url,data,[options]);
​ axios預設傳送資料時,資料格式時Request Payload,並非我們常用的form data格式
​ 所以引數必須要以鍵值對形式傳遞,不能以json形式傳參
​ 傳參方式:
​ 1,自己拼接鍵值對
​ 2,使用transformRequest,在請求傳送前將請求資料進行轉換
​ 3,如果使用模組化開發,可以使用qs 模組進行轉換
​ axios本身不支援跨域請求,
​ 使用vue-resource傳送跨域請求

vue生命週期

​ vue例項從建立到銷燬的過程,稱之為生命週期,共有八個階段

階段說明
beforeCreate元件剛被建立,還沒盡興資料觀測和事件配置
created例項已經建立完成,並且已經進行資料觀測和事件配置
beforeMount模板編譯之前,還沒掛載
mounted模板編譯之後,已經掛載,此時才會渲染頁面,才能看到頁面上資料的展示
beforeUpdate元件更新之前
updated元件更新之後
beforeDestroy元件銷燬之前
destroyed元件銷燬之後

計算屬性:

​ 1,基本用法
​ 計算屬性也是用來儲存資料,但是有以下幾個特點
​ 1,資料可以用來進行邏輯處理操作
​ 2,對計算屬性中的資料進行監視。
​ 2,計算屬性vs方法
​ 將計算屬性的get函式定義為一個方法也可以實現類似的功能
​ 區別:
​ a.計算屬性是基於他的以來進行更新的,只有在相關依賴發生時才能更新變化
​ b.計算屬性是快取的,只要相關依賴沒有改變,多次訪問計算屬性的到的值是之前快取存的計算記過,不會多次執行。
​ 3,get和set
​ 計算屬性由兩部分組成:get和set,分別用來獲取計算屬性和設定計算屬性
​ 預設只有get,如果需要set,要自己新增

vue例項的屬性和方法

​ 屬性:vm. e l v m . el vm. elvm.data vm. o p t i o n s v m . options vm. optionsvm.refs
​ 方法:
​ vm.KaTeX parse error: Expected 'EOF', got '#' at position 8: mount("#̲id") ​ vm.destroy()
​ vm. n e x t T i c k ( c a l l b a c k ) ​ v m . nextTick(callback) ​ vm. nextTick(callback)vm.set(object,key,value)
​ vm. d e l e t e ( o b j e c t , k e y ) ​ v m . delete(object,key) ​ vm. delete(object,key)vm.watch(data,callback[options])

自定義指令:

​ 分類:全域性指令、區域性指令
​ 自定義全域性指令:Vue.directive(指令id,[definition定義物件])
​ 自定義區域性指令:directives:{}

過度:

​ Vue提供了transition的封裝元件,在插入,更新或移除dom時提供不同效果的應用過度效果
​ 基本用法:transition將要執行動畫的元素包含在該元件內。

​ 運動的元素

​ 過濾的css類名 6個
​ 鉤子函式:8個
​ 結合第三方動畫庫animate.css一起使用

 <transition 
        enter-active-class="animate__animated animate__fadeInLeft"
        leave-active-class="animate__animated animate__fadeOutRight">
            <p v-show="flag">青羊區</p>

        </transition>

​ 多元素動畫

元件component

​ 簡介:可以擴充套件HTML元素,封裝可重用的程式碼,元件是自定義元素(物件)
​ 定義元件的方式:
​ 方式1:先建立元件構造器,然後由元件元件構造器來建立元件
​ 方式2:直接建立元件
​ 元件的分類:
​ 全域性元件
​ 區域性元件

​ 引用模板
​ 將元件內容放到模板中並引用

動態元件

​ 元件
​ 多個元件使用同一個掛載點,然後動態的在他們之間切換

元件間資料傳遞

​ 1,父子元件
​ 在一個元件內部定義另一個元件,稱之為父子元件,子元件只能在父元件裡面用,
​ 預設情況下子元件不能訪問父元件中的資料,每個元件例項的作用域都是獨立的
​ 2,元件間資料傳遞(通訊)
​ 子元件訪問父元件的資料:
​ a):在呼叫子元件時,繫結想要獲取的父元件中的資料
​ b):在子元件內部,使用props選項來宣告獲取的資料,即接收 來自父元件的資料。
​ 注:元件中的資料總共有三種形式:data,props,computed
​ 總結:父元件通過props向下傳遞資料給子元件
​ 父元件訪問子元件的資料:
​ a):在子元件中使用vm.$emit(事件名,資料)觸發一個自定義事 件,事件名自定義
​ b):父元件在使用子元件的地方監聽子元件觸發的事件,並在父 元件中定義方法,用來獲取資料
​ 總結:子元件通過events給父元件傳送訊息,實際上就子元件把 自己的資料傳送到父元件

單向資料流

​ props時單向繫結的,當父元件的屬性變化時,將傳導給子元件,但是不會反過來。而且不允許子元件直接修改父元件中的資料。會報錯。
​ 解決方式:
​ 方式1:如果子元件想把他作為區域性資料來使用,可以把資料存入另外一個變數再進行操作,不會影響父元件
​ 方式2:如果子元件想修改資料並且同步更新到父元件有兩種方法
​ 1,使用.sync() this.$emit(‘update:value’,‘newValue’) 需要顯式的觸發一個更新事件
​ 2,可以把父元件中的資料包裝成物件,然後在子元件中修改物件的屬性(因為物件是引用型別,指向同一個記憶體空間),更推薦這個方式

非父子元件間的通訊

​ 非父子元件間的通訊,可以通過一個空的vue例項作為中央事件匯流排(事件中心)。用它來觸發事件和監聽事件

slot內容分發:

​ slot本意:位置,槽
​ 作用:用來獲取元件中的原內容。類似於angular中的translude指令

vue-router路由:

​ 簡介:使用Vue.js開發SPa(single Page Application)單頁面應用
​ 單頁面應用:根據不同url地址,顯示不同的內容,但顯示在同一個頁面中。
​ 基本用法
​ 1,進行頁面佈局 見demo

路由的巢狀和引數的傳遞

​ 巢狀:就是在子路由下再寫一個路由,需要children[ ]
​ 傳參的兩種形式:a:查詢字串:login?name=tom&pwd=123
​ {{KaTeX parse error: Expected 'EOF', got '}' at position 12: route.query}̲} ​ b…route.params}}

路由例項的方法:

​ router.push():新增路由,功能上與router-link功能相同
​ router.replace():替換路由,不產生歷史記錄

單檔案元件

​ 1,.vue檔案
​ .vue檔案稱之為單檔案元件,是vue.js自定義的一種檔案格式,一個.vue檔案就是一個單獨的檔案,在檔案內封裝了相關的程式碼:html、css、js、
​ .vue檔案由三部分組成:、

<template>
html
</template>
<style>
css
</style>
<script>
	js
</script>
	

​ 2,vue-loader 載入器
​ 瀏覽器本身不認識.vue檔案,所以必須對.vue檔案進行載入解析,此時需要vue-loader
​ 類似的loader還有很多,如:html-loader、css-loader、style-loader、babel-loader等
​ 需要注意的是vue-loader是基於webpack的
​ 3,webpack
​ webpack是一個前端資源模組化載入器和打包工具,他能夠把各種資源都作為模組來使用和處理,實際上webpack是通過不同的loader將這些資源載入後打包,然後輸出打包後的檔案。簡單來說webpack就是一個模組載入器。所有資源都可以作為模組來載入,最後打包輸出。
​ webpack有一個核心配置檔案:webpack.config.js,必須放在專案根目錄下
​ 示例、步驟:
​ 1,建立專案,目錄結構如下:
​ |-index.html
​ |-main.js 入口檔案
​ |-App.vue vue檔案
​ |-package.json 工程檔案{描述檔案,依賴呀描述資訊等等}
​ |-.babelrc Babel配置檔案
​ |-webpack.config.js webpack配置檔案
​ 2,編寫App.vue
​ 3,安裝相關模組
​ cnpm install vue -S
​ cnpm install webpack -D
​ cnpm install webpack-dev-server -D
​ cnpm install vue-loader -D
​ cnpm install vue-html-loader -D
​ cnpm install vue-style-loader -D
​ cnpm install file-loader -D
​ cnpm install babel-loader -D
​ cnpm install babel-core -D
​ cnpm install babel-preset-env -D //根據配置的執行環境自動啟用需要babel外掛
​ cnpm install vue-template-compiler -D//預編譯模板
​ 可以合併起來一起安裝:cnpm install -D webpack webpack-dev-server vue-loader vue-html-loader css-loader vue-style-loader file-loader babel-loader babel-core babel-preset-env vue-template-compiler
​ 4,編寫main.js
​ 5,編寫webpack.config.js
​ 6,編寫.babelrc
​ 7,編寫package.json
​ 8,執行測試
​ npm run dev

vue-cli腳手架:

​ vue-cli快速構造專案結構
​ vue-cli本身集成了多種專案模板:
​ simple:用的很少 簡單
​ webpack:包含esLint程式碼規範檢查,unit單元測試等
​ webpack-simple:沒有程式碼規範和單元測試
​ browserify:更webpack差不多
​ browserify-simple:browserify的簡化版
​ 示例:
​ 1,npm install -g vue-cli,配置vue的命令環境,驗證版本命令 (不帶尖括號)<vue --version> (檢視可用模板)
​ 2,初始化專案 vue init
​ 3,進入生成的專案目錄,安裝模組包 cnpm install
​ 4,執行 npm run dev 啟動測試服務,這是測試,如果在生產環境下要使用npm run bulid命令將專案進行打包dist目錄,專案上線的話要將dist目錄拷貝到伺服器上。
​ 示例:使用webpack模板 vue init webpack demo3
​ Eslint使用來統一程式碼規範和風格的工具,如縮排,空格,符號等

模組化開發:

​ 1,vue-router模組化
​ cnpm install vue-router -S
​ 2,編輯main.js
​ 3,編輯App.vue
​ 4,編輯router.config.js

​ axios模組化
​ 安裝命令:cnpm install axios -S
​ 使用axios的兩種方式:
​ 1,在每一個元件中引入axios
​ 2,在main.js中全域性引用axios並新增到vue的原型中。
​ 為自定義元件新增事件需要新增修飾符

Element UI

​ 簡介:Element UI是餓了嗎提供的一套基於Vue2.0的元件庫,可以快速的搭建你的網站,提高開發效率。
​ Element UI PC端
​ MintUI 移動端
​ 快速上手:
​ 1,cnpm install element-ui -S
​ 2,在main.js中引入並使用元件

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
Vue.use(ElementUI);

​ 3,在webpack.config.js中新增loader,更改webpack.config.js之後要重啟伺服器,css樣式和字型圖示都需要相應的loader來載入

預設 沒有這個匹配規則
{
        test: /\.(eot|svg|ttf|woff|woff2)(\?\S*)?$/,
        loader: 'file-loader'
     }

​ 4,使用元件
​ 5,使用less
​ 安裝loader ,需要兩個:less、less-loader

cnpm install less less-loader -D

​ 按需引入組
​ 1,cnpm install babel-plugin-component -D
​ 2,配置.babelrc檔案

"plugins":[
["components",[{
"librarName":"element-ui",
"styleLibraryName":"theme-default"}]
	]
]

​ 3,只引入需要的外掛

自定義全域性元件(外掛):

​ 全域性元件(外掛):指可以在main.js中使用Vue.use()進行全域性引入,然後在其他元件中就可以直接使用,如vue-router
​ 普通元件(外掛):每次使用都要引入,如axios

Vuex

​ vuex是一個專門為Vue.js 應用程式開發的狀態管理模式,他採用集中式儲存管理應用的所有的元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化,簡單來說,就是用來集中管理資料,類似於React中的Redux,都是基於Flux的前端狀態管理框架
​ 基本用法:
​ 1,安裝vuex cnpm install vues -S
​ 2,建立store.js檔案, 在main.js檔案中匯入(import store from ‘./store.js’)並配置store選項
​ 3,編輯store.js檔案


專案
1,初始化專案:

vue init webpack itany
cd itany
cnpm install 
cnpm install less less-loader -D
cnpm install vuex -S
cnpm install axios -S
npm run dev

​ 2,專案資源
​ |-reset.css
​ |-data.json
​ 3,建立目錄結構
​ 清除專案中的部分內容
​ 建立如下目錄結構

|-data.json
|-static
	|-css
		|-reset.css

​ 4,配置api介面,模擬後臺資料
​ 使用express框架啟動一個node伺服器,配置Api介面,模擬後臺資料
​ 參考http://www.duanlonglong.com/qdjy/940.html

​ 測試api http://localhost:8081/api/goods#/
​ 5,專案整體結構開發