vue

Vue 的基本認(rèn)識(shí)

?官網(wǎng)

1)英文官網(wǎng):https://vuejs.org/

2)中文官網(wǎng):https://cn.vuejs.org/

介紹描述

1)漸進(jìn)式 JavaScript 框架

2)作者: 尤雨溪(一位華裔前 Google 工程師)

3)作用: 動(dòng)態(tài)構(gòu)建用戶界面

?Vue 的特點(diǎn)

1)遵循 MVVM 模式

2)編碼簡(jiǎn)潔, 體積小, 運(yùn)行效率高, 適合移動(dòng)/PC 端開發(fā)

3)它本身只關(guān)注 UI, 可以輕松引入 vue 插件或其它第三方庫開發(fā)項(xiàng)目

與其它前端 JS 框架的關(guān)聯(lián)

1)借鑒 angular 的模板和數(shù)據(jù)綁定技術(shù)

2)借鑒 react 的組件化和虛擬 DOM 技術(shù)

?Vue 擴(kuò)展插件

1)vue-cli: vue 腳手架

2)vue-resource(axios): ajax 請(qǐng)求

3)vue-router: 路由

4)vuex: 狀態(tài)管理

5)vue-lazyload: 圖片懶加載

6)vue-scroller: 頁面滑動(dòng)相關(guān)

7)mint-ui: 基于 vue 的 UI 組件庫(移動(dòng)端)

8)element-ui: 基于 vue 的 UI 組件庫(PC 端)

9)它本身只關(guān)注 UI, 可以輕松引入 vue 插件或其它第三方庫開發(fā)項(xiàng)目

Vue 的基本使用

編碼

<div? id="app">

<input? type="text"? v-model="username">

<p>Hello,? {{username}}</p>

</div>

<script? type="text/javascript"? src="../js/vue.js"></script>

<script? type="text/javascript">

new? Vue({

el:? '#app',

data:? {

username:? 'vue'

}

})

</script>

?模板語法

模板的理解

1)動(dòng)態(tài)的 html 頁面

2)包含了一些 JS 語法代碼

a.雙大括號(hào)表達(dá)式

b.指令(以 v-開頭的自定義標(biāo)簽屬性)

文本

? ? <span>Message:{{msg}}</span>

原始HTML

? ? <p>Using mustaches:{{rawHtml}}<p>

? ? <p>Using v-html directive:<span v-html="rawHtml"></span></p>

?雙大括號(hào)表達(dá)式

1)語法: {{exp}}

2)功能: 向頁面輸出數(shù)據(jù)

3)可以調(diào)用對(duì)象的方法

表達(dá)式

? ? {{number + 1}}

? ? {{ok?'YES':'NO'}}

? ? {{message.split('').reverse().join('')}}

指令一: 強(qiáng)制數(shù)據(jù)綁定

1)功能: 指定變化的屬性值

2)完整寫法:

v-bind:xxx='yyy' //yyy 會(huì)作為表達(dá)式解析執(zhí)行

3)簡(jiǎn)潔寫法:

:xxx='yyy'

指令二: 綁定事件監(jiān)聽

1)功能: 綁定指定事件名的回調(diào)函數(shù)

2)完整寫法:

v-on:keyup='xxx'

v-on:keyup='xxx(參數(shù))' v-on:keyup.enter='xxx'

3)簡(jiǎn)潔寫法:

@keyup='xxx' @keyup.enter='xxx'

計(jì)算屬性和監(jiān)視

?計(jì)算屬性

1)在 computed 屬性對(duì)象中定義計(jì)算屬性的方法

2)在頁面中使用{{方法名}}來顯示計(jì)算的結(jié)果

監(jiān)視屬性

1)通過通過 vm 對(duì)象的$watch()或 watch 配置來監(jiān)視指定的屬性

2)當(dāng)屬性變化時(shí), 回調(diào)函數(shù)自動(dòng)調(diào)用, 在函數(shù)內(nèi)部進(jìn)行計(jì)算

?計(jì)算屬性高級(jí)

1)通過 getter/setter 實(shí)現(xiàn)對(duì)屬性數(shù)據(jù)的顯示和監(jiān)視

2)計(jì)算屬性存在緩存, 多次讀取只執(zhí)行一次 getter 計(jì)算

1.5. class 與 style 綁定

理解

1)在應(yīng)用界面中, 某個(gè)(些)元素的樣式是變化的

2)class/style 綁定就是專門用來實(shí)現(xiàn)動(dòng)態(tài)樣式效果的技術(shù)

class 綁定

1):class='xxx'

2)表達(dá)式是字符串: 'classA'

3)表達(dá)式是對(duì)象: {classA:isA, classB: isB}

4)表達(dá)式是數(shù)組: ['classA', 'classB']

style 綁定

1):style="{ color: activeColor, fontSize: fontSize + 'px' }"

2)其中 activeColor/fontSize 是 data 屬性

條件渲染

條件渲染指令

1)v-if 與 v-else

2)v-show

比較 v-if 與 v-show

3)如果需要頻繁切換 v-show 較好

4)當(dāng)條件不成立時(shí), v-if 的所有子節(jié)點(diǎn)不會(huì)解析

列表渲染

列表顯示指令

數(shù)組: v-for / index

對(duì)象: v-for / key

列表的更新顯示

刪除 item

替換 item

列表的高級(jí)處理

列表過濾

列表排序

事件處理

綁定監(jiān)聽:

1)v-on:xxx="fun"

2)@xxx="fun"

3)@xxx="fun(參數(shù))"

4)默認(rèn)事件形參: event

5)隱含屬性對(duì)象: $event

事件修飾符

1).prevent : 阻止事件的默認(rèn)行為 event.preventDefault()

2).stop : 停止事件冒泡 event.stopPropagation()

按鍵修飾符

1).keycode : 操作的是某個(gè) keycode 值的鍵

2).keyName : 操作的某個(gè)按鍵名的鍵(少部分)

?表單輸入綁定

使用 v-model 對(duì)表單數(shù)據(jù)自動(dòng)收集

1)text/textarea

2)checkbox

3)radio

4)select

?vue 生命周期分析

1)初始化顯示

*beforeCreate()

*created()

*beforeMount()

*mounted()

2)更新狀態(tài): this.xxx = value

*beforeUpdate()

*updated()

3)銷毀 vue 實(shí)例: vm.$destory()

*beforeDestory()

*destoryed()

常用的生命周期方法

1)created()/mounted(): 發(fā)送 ajax 請(qǐng)求, 啟動(dòng)定時(shí)器等異步任務(wù)

2)beforeDestory(): 做收尾工作, 如: 清除定時(shí)器

過渡&動(dòng)畫

?vue 動(dòng)畫的理解

1)操作 css 的 trasition 或 animation

2)vue 會(huì)給目標(biāo)元素添加/移除特定的 class

3)過渡的相關(guān)類名

xxx-enter-active: 指定顯示的 transition

xxx-leave-active: 指定隱藏的 transition

xxx-enter/xxx-leave-to: 指定隱藏時(shí)的樣式

?基本過渡動(dòng)畫的編碼

1)在目標(biāo)元素外包裹

2)定義 class 樣式

指定過渡樣式: transition

指定隱藏時(shí)的樣式: opacity/其它

?過濾器

?理解過濾器

1)功能: 對(duì)要顯示的數(shù)據(jù)進(jìn)行特定格式化后再顯示

2)注意: 并沒有改變?cè)镜臄?shù)據(jù), 可是產(chǎn)生新的對(duì)應(yīng)的數(shù)據(jù)

?定義和使用過濾器

1)定義過濾器

Vue.filter(filterName, function(value[,arg1,arg2,...]){

// 進(jìn)行一定的數(shù)據(jù)處理

return newValue

})

2)使用過濾器

<div>{{myData | filterName}}</div>

<div>{{myData | filterName(arg)}}</div>

內(nèi)置指令與自定義指令

常用內(nèi)置指令

1)v-text : 更新元素的 textContent

2)v-html : 更新元素的 innerHTML

3)v-if : 如果為 true, 當(dāng)前標(biāo)簽才會(huì)輸出到頁面

4)v-else: 如果為 false, 當(dāng)前標(biāo)簽才會(huì)輸出到頁面

5)v-show : 通過控制 display 樣式來控制顯示/隱藏

6)v-for : 遍歷數(shù)組/對(duì)象

7)v-on : 綁定事件監(jiān)聽, 一般簡(jiǎn)寫為@

8)v-bind : 強(qiáng)制綁定解析表達(dá)式, 可以省略 v-bind 簡(jiǎn)寫為:

9)v-model : 雙向數(shù)據(jù)綁定

10)ref : 指定唯一標(biāo)識(shí), vue 對(duì)象通過$refs 屬性訪問這個(gè)元素對(duì)象

11)v-cloak : 防止閃現(xiàn), 與 css 配合: [v-cloak] { display: none }

1.13.2. 自定義指令

1)注冊(cè)全局指令

Vue.directive('my-directive', function(el, binding){ el.innerHTML = binding.value.toupperCase()

})

// 注冊(cè)一個(gè)全局自定義指令 `v-focus`

Vue.directive('focus', {

? // 當(dāng)被綁定的元素插入到 DOM 中時(shí)……

? inserted: function (el) {

? ? // 聚焦元素

? ? el.focus()

? }

})

2)注冊(cè)局部指令

directives : {

'my-directive' : {

bind (el, binding) {

el.innerHTML = binding.value.toupperCase()

}

}

}

3)使用指令

v-my-directive='xxx'

自定義插件

說明

1)Vue 插件是一個(gè)包含 install 方法的對(duì)象

2)通過 install 方法給 Vue 或 Vue 實(shí)例添加方法, 定義全局指令等

使用 vue-cli 創(chuàng)建模板項(xiàng)目

說明

vue-cli 是 vue 官方提供的腳手架工具

github:https://github.com/vuejs/vue-cli

作用: 從 https://github.com/vuejs-templates 下載模板項(xiàng)目

創(chuàng)建 vue 項(xiàng)目

vue -V 顯示版本2時(shí)

npm install -g vue-cli

vue init webpack vue_demo

cd vue_demo

npm install

npm run dev

訪問: http://localhost:8080/

vue -V 顯示版本3時(shí)

npm install -g @vue/cli

vue create vue_demo

cd vue_demo

npm install

npm run dev

訪問: http://localhost:8080/

模板項(xiàng)目的結(jié)構(gòu)

|-- build : webpack 相關(guān)的配置文件夾(基本不需要修改)

|-- dev-server.js : 通過 express 啟動(dòng)后臺(tái)服務(wù)器

|-- config: webpack 相關(guān)的配置文件夾(基本不需要修改)

|-- index.js: 指定的后臺(tái)服務(wù)的端口號(hào)和靜態(tài)資源文件夾

|-- node_modules

|-- src : 源碼文件夾

|-- components: vue 組件及其相關(guān)資源文件夾

|-- App.vue: 應(yīng)用根主組件

|-- main.js: 應(yīng)用入口 js

|-- static: 靜態(tài)資源文件夾

|-- .babelrc: babel 的配置文件

|-- .eslintignore: eslint 檢查忽略的配置

|-- .eslintrc.js: eslint 檢查的配置

|-- .gitignore: git 版本管制忽略的配置

|-- index.html: 主頁面文件

|-- package.json: 應(yīng)用包配置文件

|-- README.md: 應(yīng)用描述說明的 readme 文件

?項(xiàng)目的打包與發(fā)布

打包:

npm run build

發(fā)布 1: 使用靜態(tài)服務(wù)器工具包

npm install -g serve

serve dist

訪問: http://localhost:5000

發(fā)布 2: 使用動(dòng)態(tài) web 服務(wù)器(tomcat)

修改配置: webpack.prod.conf.js

output: {

???? publicPath: '/xxx/' //打包文件夾的名稱

}

重新打包:

npm run build

修改 dist 文件夾為項(xiàng)目名稱: xxx

將 xxx 拷貝到運(yùn)行的 tomcat 的 webapps 目錄下訪問: http://localhost:8080/xxx

?ESLint

說明

ESLint 是一個(gè)代碼規(guī)范檢查工具

它定義了很多特定的規(guī)則, 一旦你的代碼違背了某一規(guī)則, eslint 會(huì)作出非常有用的提示

官網(wǎng): http://eslint.org/

基本已替代以前的 JSLint

ESLint 提供以下支持

ES

JSX

style 檢查

自定義錯(cuò)誤和提示

ESLint 提供以下幾種校驗(yàn)

語法錯(cuò)誤校驗(yàn)

不重要或丟失的標(biāo)點(diǎn)符號(hào),如分號(hào)

沒法運(yùn)行到的代碼塊

未被使用的參數(shù)提醒

確保樣式的統(tǒng)一規(guī)則,如 sass 或者 less

檢查變量的命名

規(guī)則的錯(cuò)誤等級(jí)有三種

0:關(guān)閉規(guī)則。

1:打開規(guī)則,并且作為一個(gè)警告(信息打印黃色字體)

2:打開規(guī)則,并且作為一個(gè)錯(cuò)誤(信息打印紅色字體)

?相關(guān)配置文件

.eslintrc.js : 全局規(guī)則配置文件

'rules': {

???? 'no-new': 1

}

在 js/vue 文件中修改局部規(guī)則

/* eslint-disable no-new */

new Vue({

???? el: 'body',

components: { App }

})

.eslintignore: 指令檢查忽略的文件

*.js

*.vue

組件定義與使用

?vue 文件的組成(3 個(gè)部分)

模板頁面

<template>

頁面模板

</template>

JS 模塊對(duì)象

<script>

???? export default {

???????? data() {return {}},

???????? methods: {},

???????? computed: {},

???????? components: {}

}

</script>

樣式

<style>

樣式定義

</style>

基本使用

引入組件

映射成標(biāo)簽

使用組件標(biāo)簽

<template>

???? <HelloWorld></HelloWorld>

???? <hello-world></hello-world>

</template>

<script>

???? import HelloWorld from './components/HelloWorld'

???? export default {

???????? components: {

???????????? HelloWorld

???????? }

???? }

</script>

關(guān)于標(biāo)簽名與標(biāo)簽屬性名書寫問題

寫法一:一模一樣

寫法二:大寫變小寫, 并用-連接

?組件間通信

組件間通信基本原則

不要在子組件中直接修改父組件的狀態(tài)數(shù)據(jù)

數(shù)據(jù)在哪, 更新數(shù)據(jù)的行為(函數(shù))就應(yīng)該定義在哪

vue 組件間通信方式

props

vue 的自定義事件

消息訂閱與發(fā)布(如: pubsub 庫)

slot

vuex

組件間通信 1: props

使用組件標(biāo)簽時(shí)

<my-component name = 'tom' :age = '3' :set-name = 'setName'></my-component>

定義 MyComponent 時(shí)

在組件內(nèi)聲明所有的 props

方式一: 只指定名稱

props: ['name', 'age', 'setName']

方式二: 指定名稱和類型

props: {

???? name: String, age: Number,

???? setNmae: Function

}

方式三: 指定名稱/類型/必要性/默認(rèn)值

props: {

???? name: {type: String, required: true, default:xxx},

}

?注意

此方式用于父組件向子組件傳遞數(shù)據(jù)

所有標(biāo)簽屬性都會(huì)成為組件對(duì)象的屬性, 模板頁面可以直接引用

問題:

a.如果需要向非子后代傳遞數(shù)據(jù)必須多層逐層傳遞

b.兄弟組件間也不能直接 props 通信, 必須借助父組件才可以

?組件間通信 2: vue 自定義事件

綁定事件監(jiān)聽

// 方式一:通過 v-on 綁定

@delete_todo="deleteTodo"

// 方式二:通過 $on()

this.$refs.xxx.$on('delete_todo', function (todo) {

???? this.deleteTodo(todo)

})

觸發(fā)事件

// 觸發(fā)事件(只能在父組件中接收)

this.$emit(eventName, data)

?注意:

此方式只用于子組件向父組件發(fā)送消息(數(shù)據(jù))

問題: 隔代組件或兄弟組件間通信此種方式不合適

?組件間通信 3: 消息訂閱與發(fā)布(PubSubJS 庫)

?訂閱消息

PubSub.subscribe('msg', function(msg, data){})

發(fā)布消息

PubSub.publish('msg', data)

注意

優(yōu)點(diǎn): 此方式可實(shí)現(xiàn)任意關(guān)系組件間通信(數(shù)據(jù))

事件的 2 個(gè)重要操作(總結(jié))

綁定事件監(jiān)聽 (訂閱消息)

目標(biāo): 標(biāo)簽元素 <button>

事件名(類型): click/focus

回調(diào)函數(shù): function(event){}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基本用法 一、vuejs簡(jiǎn)介 是一個(gè)構(gòu)建用戶界面的框架 是一個(gè)輕量級(jí)的MVVM(Model-View-ViewMo...
    深度剖析JavaScript閱讀 18,347評(píng)論 0 8
  • 一、了解Vue.js 1.1.1 Vue.js是什么? 簡(jiǎn)單小巧、漸進(jìn)式、功能強(qiáng)大的技術(shù)棧 1.1.2 為什么學(xué)習(xí)...
    蔡華鵬閱讀 3,500評(píng)論 0 3
  • Vue是現(xiàn)在最流行的前端框架之一,而且相對(duì)于其他兩個(gè)框架React和Angular來說也更加易學(xué),而且它的作者是國...
    dinel閱讀 5,039評(píng)論 0 9
  • Vue是現(xiàn)在最流行的前端框架之一,而且相對(duì)于其他兩個(gè)框架React和Angular來說也更加易學(xué),而且它的作者是國...
    樂百川閱讀 3,544評(píng)論 0 9
  • vue的核心是什么? Vue 的核心設(shè)計(jì)理念可以概括為以下 5 個(gè)關(guān)鍵要素,這些要素共同構(gòu)成了 Vue 的獨(dú)特優(yōu)勢(shì)...
    Aniugel閱讀 10,230評(píng)論 3 21

友情鏈接更多精彩內(nèi)容