摘要:注意指令前面需要加,對指令傳遞數(shù)據(jù)賦值使用例如約定速成加上,表示自定義指令不要使用駝峰式命名。需要通過方法實現(xiàn)自定義指令注冊完成。
vue
Vue.js 構(gòu)建數(shù)據(jù)驅(qū)動的web界面庫。集中實現(xiàn)MVVM 的 VM層。容易與其他庫或項目整合
通過盡可能簡單的API實現(xiàn)相應(yīng)的數(shù)據(jù)綁定和組合的視圖組件
核心:相應(yīng)的數(shù)據(jù)綁定系統(tǒng), 數(shù)據(jù)與DOM保持同步
數(shù)據(jù)驅(qū)動的視圖,普通的HTML模板中使用特殊的語法講DOM"綁定"到底層數(shù)據(jù)
整個程序分為:
全局設(shè)計:包括全局接口,默認選項
VM實例設(shè)計: 包括接口設(shè)計(VM原型),實例初始化過程設(shè)計()
deps里存在的是各個響應(yīng)數(shù)據(jù)依賴對象的引用因此可以手動改動響應(yīng)數(shù)據(jù)的訂閱依賴。
簡介Vue是一個類,想獲取該類的實例化對象需要通過new
// model var data = { info: "pink" } //vm 實例 var vm = new Vue({ el: "#app", data: data });
整個實例初始化過程中,最主要的就是把數(shù)據(jù)(Model) 和視圖(View)建立聯(lián)系
通過observer對data進行監(jiān)聽,并且提供訂閱某個數(shù)據(jù)項的變化的能力
把template解析成一段document fragment,然后解析成其中的directive,得到每一個directive所依賴的數(shù)據(jù)項及更新方法
通過watcher把上述兩部分結(jié)合起來,把directive中的數(shù)據(jù)依賴訂閱在對應(yīng)數(shù)據(jù)結(jié)構(gòu)的observer,當(dāng)數(shù)據(jù)變化的時候,就會觸發(fā)observer,進而觸發(fā)相關(guān)依賴對應(yīng)的視圖更新方法,最后達到模板原本的關(guān)聯(lián)效果。
整個VM實例核心,通過observer,directive(parser),watcher。
Vue生命周期
module.exports = { template: require("list.html"), data: function(){ return {items:[{"id":1,"name":"hello11"},{"id":2,"name":"hello22"}]}; }, //在實例開始初始化時同步調(diào)用。此時數(shù)據(jù)觀測、事件和 watcher 都尚未初始化 init:function(){ console.log("init.."); }, //在實例創(chuàng)建之后同步調(diào)用。此時實例已經(jīng)結(jié)束解析選項,這意味著已建立:數(shù)據(jù)綁定,計算屬性,方法,watcher/事件回調(diào)。但是還沒有開始 DOM 編譯,$el 還不存在。 created:function(){ console.log("created.."); }, //在編譯開始前調(diào)用。 beforeCompile:function(){ console.log("beforeCompile.."); }, //在編譯結(jié)束后調(diào)用。此時所有的指令已生效,因而數(shù)據(jù)的變化將觸發(fā) DOM 更新。但是不擔(dān)保 $el 已插入文檔。 compiled:function(){ console.log("compiled.."); }, //在編譯結(jié)束和 $el 第一次插入文檔之后調(diào)用,如在第一次 attached 鉤子之后調(diào)用。注意必須是由 Vue 插入(如 vm.$appendTo() 等方法或指令更新)才觸發(fā) ready 鉤子。 ready: function () { console.log("ready.."); }, //在 vm.$el 插入 DOM 時調(diào)用。必須是由指令或?qū)嵗椒ǎㄈ?$appendTo())插入,直接操作 vm.$el 不會 觸發(fā)這個鉤子。 attached:function(){ console.log("attached.."); }, //在 vm.$el 從 DOM 中刪除時調(diào)用。必須是由指令或?qū)嵗椒▌h除,直接操作 vm.$el 不會 觸發(fā)這個鉤子。 detached:function(){ console.log("detached.."); }, //在開始銷毀實例時調(diào)用。此時實例仍然有功能。 beforeDestroy:function(){ console.log("beforeDestroy.."); }, //在實例被銷毀之后調(diào)用。此時所有的綁定和實例的指令已經(jīng)解綁,所有的子實例也已經(jīng)被銷毀。如果有離開過渡,destroyed 鉤子在過渡完成之后調(diào)用。 destroyed:function(){ console.log("destroyed.."); } };選擇器
實例化參數(shù)中配置項中,el指代選擇器,表示該實例化對象對應(yīng)的容器元素
選擇器和jQuery中一樣的選擇器,如果有多個的時候,只會選擇第一個。
var vmzf = new Vue({ el: ".app", data: data });數(shù)據(jù)綁定
對實例化對象綁定數(shù)據(jù),通過data屬性綁定,也是就data是一個js對象。
data中的屬性與vue中的屬性是同步的,不論值類型的數(shù)據(jù),還是引用類型的數(shù)據(jù),都是同一個。(數(shù)據(jù)綁定現(xiàn)象)
當(dāng)實例化一個Vue構(gòu)造函數(shù),會執(zhí)行Vue的init方法,在init方法中主要執(zhí)行了三部分內(nèi)容:
初始化環(huán)境變量
處理Vue組件數(shù)據(jù)
解析掛載組件
實現(xiàn)一個觀察者-消費者(訂閱者)模式來實現(xiàn)數(shù)據(jù)卻動視圖,通過設(shè)定對象屬性的seter/getter方法來監(jiān)聽數(shù)據(jù)的變化,而每個屬性的setter方法就是一個觀察著,當(dāng)屬性變化將會向訂閱者發(fā)送消息,從而驅(qū)動視圖更新。
構(gòu)建一個watcher最重要的是expOrFN和cb兩個參數(shù),cb是訂閱者收到消息后需要執(zhí)行的回調(diào)。一般來說這個回調(diào)都是視圖指令更新的方法,從而達到視圖的更新。
訂閱回調(diào)也可以是一個和任何無關(guān)的純函數(shù)。一個訂閱者最重要的是要知道訂閱了什么,watcher分析expOrFn的getter方法,從而間接的獲得訂閱的對象屬性。
var data = { info: "pink" } var vmzf = new Vue({ el: ".app", data: data }); console.log( data.info === vmzf.info ); //true
VUe中的視圖的更新其實就是指令的更新,為了做到數(shù)據(jù)驅(qū)動視圖更新,需要注冊一個訂閱者訂閱數(shù)據(jù)的變化,通過回調(diào)來進行指令更新。
path解析path解析器的狀態(tài)機
Vue.js是通過狀態(tài)機管理來實現(xiàn)對路徑的解析
狀態(tài)機表是否由數(shù)字常量組成,解析更準確的同時效率也會更高。
將數(shù)據(jù)同步到view(頁面)
使用: {{ key }}
dom 和屬性都都可以插入
單次插入{{msg}}
將數(shù)據(jù)插入頁面中,而不能再被修改,或者重新插入新值
使用: {{*key}}
過濾HTML標簽{{*msg}}
將數(shù)據(jù)中的html標簽渲染到頁面中
使用:{{{key}}}
{{{msg}}}
var data = { msg: "success!" } var vm = Vue({ el: "#app", data: data });過濾器
過濾器filter直接對插值使用
使用:{{ key | filter }}
動態(tài)插值// 美元符號 {{ msg | currency }} // 轉(zhuǎn)大寫 {{ msg | uppercase }} // 首字母大寫 {{ msg | capitalize }}
在插入的過程中,動態(tài)對值進行修改
插入到頁面中提前執(zhí)行一遍
使用:
computed: { key: function () { reutrn newKey; } }
function 是在當(dāng)前vue實例對象上執(zhí)行,通過this可以訪問到vue實例對象上的屬性和方法。
computed: { txt: function () { return this.txt = "pink"; } }數(shù)據(jù)雙向綁定
v-model 當(dāng)視圖中一些操作會修改vue中的數(shù)據(jù),同樣, vue中的數(shù)據(jù)被修改會映射到視圖中。
使用:html標簽屬性添加v-model, 屬性值為vue綁定數(shù)據(jù)中的數(shù)據(jù)。
class對象綁定{{msg | uppercase}}
使用:v-bind:class="{className: Bollean}"
如果class綁定的數(shù)據(jù)值true,className會被添加上,否則刪除。
class數(shù)組綁定{{txt}}
使用:v-bind:class="[data.property1, data.property2]"
樣式的對象綁定{{txt}}
使用:v-bind:style="{key:value}"
樣式的數(shù)組綁定{{txt}}
使用:v-bind: style="[style1, style2]"
vue模板指令{{ txt }}
指令是模板中出現(xiàn)的特殊標記,讓處理模板的庫知道需要對這里的DOM元素進行一些對應(yīng)的處理
v-text="msg"
前綴是默認的 v-。指令的 ID 是 text,表達式是 msg。
指令告訴 Vue.js, 當(dāng) Vue 實例的msg屬性改變時,更新該 div 元素的 textContent。
v-if
v-else
多條件判斷| & {{msg}}
使用:
// 判斷執(zhí)行體
// 自定義標簽template顯示隱藏| & {{msg}}
v-show="key"
如果key是true那么該元素顯示,否則隱藏該元素
循環(huán)模板| {{ msg }}
v-for="item in msg"
item是msg中的成員
使用:
// 循環(huán)體
表單操作,輸入一些數(shù)據(jù),如何將這些數(shù)據(jù)映射到j(luò)s。通過v-model指令,來把數(shù)據(jù)發(fā)送給后臺。
原理上是對這些表單元素在vue中綁定了一些事件來實現(xiàn)。
v-model要綁定不同的值
單選中 英 {{ size| json }}
v-model要綁定同一個值
value指定不同的值
下拉框{{sex}}
select上面添加上一個v-model屬性,即可實現(xiàn)下拉框的雙向綁定
multiple,多選
節(jié)流&延遲{{ msg }}
debounce 表示為雙向綁定的數(shù)據(jù)進行節(jié)流處理,輸入完一段時間處理
lazy表示表單失去焦點時候處理數(shù)據(jù)
自定義指令-- {{msg}}
是將傳遞的數(shù)據(jù)映射到DOM的行為
調(diào)用自定義指令:直接對DOM元素上添加指令名稱。注意:指令前面需要加v-,對指令傳遞數(shù)據(jù)賦值使用=
例如:v-pirce-directive="msg";
directive 約定速成加上,表示自定義指令,不要使用駝峰式命名。
需要通過Vue.directive(); 方法實現(xiàn)自定義指令注冊完成。
參數(shù)有兩個
表示指令的名稱:注意指令的名稱不能有v-,注意:指令名稱不能存在大寫字母,字母間只能添加-
表示指令的主體,描述這個指令
This指向的是當(dāng)前自定義指令實例化對象
指令創(chuàng)建完得到一個指令對象,那么指令對象中有個el屬性,表示的調(diào)用該指令的dom元素
例子:
自定義過濾器用戶名4-8位
通過Vue.filter(); 實現(xiàn)自定義過濾器
接收參數(shù):
過濾器名稱
過濾函數(shù) - 它有一個參數(shù),表示被處理的數(shù)據(jù)
它的this指向的是vue實例化對象,因此可以在該函數(shù)中訪問到該vue實例化對象中的屬性和方法
調(diào)用:
直接在數(shù)據(jù)后面添加 | 以及過濾器名稱
{{ price | showPrice priceName }}
過濾器參數(shù)
在過濾器后面定義的數(shù)據(jù)即是將要被傳遞到過濾器函數(shù)中的參數(shù)
{{ price | showPrice priceName }}
Events 綁定用戶名:
- {{ msg | removeEmail }}{{ item }}
v-on實現(xiàn)事件的綁定
注冊
在vue類的參數(shù)中的methods屬性中添加事件回調(diào)函數(shù)
它的this指向的是vue實例化對象
參數(shù)是事件對象
按鍵修飾符enter、tab、delete、esc、space、up、down、left、right
事件參數(shù)的傳遞{{msg}}
在DOM上注冊事件,在事件名稱后加一對圓括號,括號中傳遞的參數(shù)。
events事件對象是:$event
過渡{{msg}}
vue的過渡動畫
transition="animation"
在css上定義預(yù)定義類
animation-transition
animation-enter
animation-leave
.animation-transition { transition: all 1s; width: 100px; height: 300px; } .animation-enter, .animation-leave { width: 0; height: 0; }組件
vue中的組件,一組可以重復(fù)利用的DOM元素(自定義的元素) -> 通常是一個自定義元素 (模板)
使用組件兩部分:
定義組件
注冊組件
通過template屬性為組件添加模板
通過data屬性為組件綁定數(shù)據(jù)
與Vue實例化對象中data屬性的區(qū)別:是一個函數(shù),需要將數(shù)據(jù)return 出來
組件定義
將組件上的數(shù)據(jù)映射到自定義模板標記上
props: ["msg"]
可以對組件添加屬性,將父組件中的數(shù)據(jù)傳遞進來,子組件需要定義props。子組件使用父組件的功能。
子組件使用父組件中的數(shù)據(jù),在它的方法中,通過this.$parent來使用父組件中的數(shù)據(jù)。
動態(tài)組件
無法同時顯示 多個組件
就要在視圖中寫入該組件對應(yīng)的自定義元素。
添加屬性v-bind:is="組件的名稱"
實現(xiàn)組件之間切換
// 定義組件 var Home = Vue.extend({ template: "home
" }); var List = Vue.extend({ template: "List
" }); var Product = Vue.extend({ template: "product
" }); // 實現(xiàn)組件綁定 Vue.component("home",Home); Vue.component("list",List); Vue.component("product",Product); // 數(shù)據(jù) var data = { view: "home" } // Meittuan實例化 var MeituanVm = new Vue({ el: "#app", data: data });
動態(tài)通信
v-bind: 將數(shù)據(jù)綁定到屬性上
v-bind:propsname="key"
組件是一個獨立的環(huán)境,如果需要事件方法綁定,寫在組件內(nèi)部。
父組件到子組件的通信
通過對子組件綁定屬性,屬性值是父組件內(nèi)的數(shù)據(jù),在子組件中通過props屬性來訂閱,實現(xiàn)父組件到子組件的通信
$broadcast
template: "hello{{msg}}
", // 發(fā)布事件 methods: { // 定義事件 tuUpper: function ( ev ) { this.msg = this.msg && this.msg.toUpperCase(); } }
子組件收到父組件的信息
events是一個對象,每一個屬性值就是一個消息名稱
// 發(fā)布事件 // 子組件到父組件的通信 this.$dispatch("appMsg", this.msg); events: { // 定義事件 appMsg: function ( msg ) { console.log(msg); } }
可以通過消息系統(tǒng)實現(xiàn),在父組件中訂閱消息(events屬性內(nèi)),在子組件中發(fā)布這條消息,this.$dispatch("appMsg", "hello");
{{inp}}
組件添加數(shù)據(jù)
$set
需要在組件data中先設(shè)置為默認值
在組件中為組件綁定數(shù)據(jù)不可以通過this.msg這種方式來添加綁定的數(shù)據(jù),必須通過$set方法添加綁定的數(shù)據(jù)
this.$set("list", reslut.list);
動態(tài)屬性
在vue中如果屬性需要動態(tài)渲染使用 v-bind 指令
img,請求圖片數(shù)據(jù),有時候會 {{}} 解析不成功,需要使用動態(tài)屬性
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79832.html
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:上一篇文章我們寫到從入口文件一步步找到的構(gòu)造函數(shù),現(xiàn)在我們要去看看實例化經(jīng)歷的過程的構(gòu)造函數(shù)我們知道的構(gòu)造函數(shù)在中不明白的可以去看上一篇文章源碼學(xué)習(xí)筆記一。 上一篇文章我們寫到從入口文件一步步找到Vue的構(gòu)造函數(shù),現(xiàn)在我們要去看看Vue實例化經(jīng)歷的過程 Vue的構(gòu)造函數(shù) 我們知道Vue的構(gòu)造函數(shù)在src/core/instance/index.js中,不明白的可以去看上一篇文章 Vue...
摘要:哪吒別人的看法都是狗屁,你是誰只有你自己說了才算,這是爹教我的道理。哪吒去他個鳥命我命由我,不由天是魔是仙,我自己決定哪吒白白搭上一條人命,你傻不傻敖丙不傻誰和你做朋友太乙真人人是否能夠改變命運,我不曉得。我只曉得,不認命是哪吒的命。 showImg(https://segmentfault.com/img/bVbwiGL?w=900&h=378); 出處 查看github最新的Vue...
摘要:中文官網(wǎng)英文官網(wǎng)組織發(fā)出一個問題之后,不要暫時的離開電腦,如果沒有把握先不要提問。珍惜每一次提問,感恩每一次反饋,每個人工作還是業(yè)余之外抽出的時間有限,充分準備好應(yīng)有的資源之后再發(fā)問,有利于問題能夠高效質(zhì)量地得到解決。 Vue.js資源分享 更多資源請Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/maid...
閱讀 3572·2023-04-26 02:10
閱讀 1321·2021-11-22 15:25
閱讀 1675·2021-09-22 10:02
閱讀 913·2021-09-06 15:02
閱讀 3475·2019-08-30 15:55
閱讀 608·2019-08-30 13:58
閱讀 2782·2019-08-30 12:53
閱讀 3060·2019-08-29 12:38