閱讀時間預估:3分鐘
html
當你看到這篇文章的時候,想必這位大俠不免多少略知Vue這個世界級別的框架的來頭,華裔程序貴族尤雨溪大佬的開源做品(膜拜大佬三分鐘...),從面世至今gitHub上的點贊數量已經超過Angular,React等著名框架,🔥的發紫,着實有後來者居上的感受,Vue借鑑了前二者的優秀設計模式和思想以一種漸進式的模式呈現給咱們,意圖也很是明顯,小白上手首選,學習成本低,開源社區活躍,廢話很少說,接下來跟(da)着(lao)個人腳步,帶你從小白進階大佬(chui niu)..前端
大佬叮囑: 萬層高樓平地起,做爲vue小白vue官方中文網必定要努力的通讀幾遍,案例必定要多敲幾遍哦.vue
咱們所說的前端框架與庫的區別?react
庫,本質上是一些函數的集合。每次調用函數,實現一個特定的功能,接着把控制權交給使用者git
框架,是一套完整的解決方案,使用框架的時候,須要把你的代碼放到框架合適的地方,框架會在合適的時機調用你的代碼程序員
You call Library, Framework calls yougithub
核心點:誰起到主導做用(控制反轉)npm
好萊塢原則:Don't call us, we'll call you.編程
框架的侵入性很高(從頭至尾)segmentfault
後端中經常採用MVC模式.
MVC模式,將應用程序劃分爲三大部分,實現了職責分離
在前端中常常要經過 JS代碼 來進行一些邏輯操做,最終還要把這些邏輯操做的結果如今頁面中。也就是須要頻繁的操做DOM
MVVM經過數據雙向綁定讓數據自動地雙向同步
Vue這種MVVM模式的框架,不推薦開發人員手動操做DOM
雖然沒有徹底遵循 MVVM 模型,Vue 的設計無疑受到了它的啓發。所以在文檔中常常會使用 vm (ViewModel 的簡稱) 這個變量名錶示 Vue 實例
<!-- 指定vue管理內容區域,須要經過vue展現的內容都要放到找個元素中 一般咱們也把它叫作邊界 數據只在邊界內部解析-->
<div id="app">{{ msg }}</div>
<!-- 引入 vue.js -->
<script src="vue.js"></script>
<!-- 使用 vue -->
<script>
var vm = new Vue({
// el:提供一個在頁面上已存在的 DOM 元素做爲 Vue 實例的掛載目標
el: '#app',
// Vue 實例的數據對象,用於給 View 提供數據
data: {
msg: 'Hello Vue'
}
})
</script>
複製代碼
var vm = new Vue({
data: {
msg: '你們好,我是Geek-James'
}
})
vm.$data.msg === vm.msg // true
複製代碼
<h1>Hello, {{ msg }}.</h1>
<p>{{ 1 + 2 }}</p>
<p>{{ isOk ? 'yes': 'no' }}</p>
<!-- !!!錯誤示範!!! -->
<h1 title="{{ err }}"></h1>
複製代碼
雙向數據綁定:將DOM與Vue實例的data數據綁定到一塊兒,彼此之間相互影響
原理:Object.defineProperty中的get和set方法
/* defineProperty語法 介紹 */
var obj = {}
Object.defineProperty(obj, 'msg', {
// 設置 obj.msg = "1" 時set方法會被系統調用 參數分別是設置後和設置前的值
set: function (newVal, oldVal) { },
// 讀取 obj.msg 時get方法會被系統調用
get: function ( newVal, oldVal ) {}
})
複製代碼
<!-- 示例 -->
<input type="text" id="txt" />
<span id="sp"></span>
<script>
var txt = document.getElementById('txt'),
sp = document.getElementById('sp'),
obj = {}
// 給對象obj添加msg屬性,並設置setter訪問器
Object.defineProperty(obj, 'msg', {
// 設置 obj.msg 當obj.msg反生改變時set方法將會被調用
set: function (newVal) {
// 當obj.msg被賦值時 同時設置給 input/span
txt.value = newVal
sp.innerText = newVal
}
})
// 監聽文本框的改變 當文本框輸入內容時 改變obj.msg
txt.addEventListener('keyup', function (event) {
obj.msg = event.target.value
})
</script>
複製代碼
var vm = new Vue({
data: {
stu: {
name: 'jack',
age: 19
}
}
})
/* Vue.set */
Vue.set(vm.stu, 'gender', 'male')
/* Object.assign 將參數中的全部對象屬性和值 合併到第一個參數 並返回合併後的對象*/
vm.stu = Object.assign({}, vm.stu, { gender: 'female', height: 180 })
複製代碼
說明:Vue 異步執行 DOM 更新,監視全部數據改變,一次性更新DOM
優點:能夠去除重複數據,對於避免沒必要要的計算和 避免重複 DOM 操做上,很是重要
若是須要那到更新後dom中的數據 則須要經過 Vue.nextTick(callback):在DOM更新後,執行某個操做(屬於DOM操做)
methods: {
fn() {
this.msg = 'change'
this.$nextTick(function () {
console.log('$nextTick中打印:', this.$el.children[0].innerText);
})
console.log('直接打印:', this.$el.children[0].innerText);
}
}
複製代碼
Vue是個啥? 看完這篇不知道面前的這位大俠是否真正的領略到,歡迎留言點贊加評論,文章有不對的地方懇請各位大佬提出.
若是個人分享對面前的這位大俠有所啓發,懇請以程序員最高禮遇點✨ 星加分享的方式鼓勵我.
關注公衆號回覆:學習 領取前端最新最全學習資料,也能夠進羣和大佬一塊兒學習交流