邂逅Vue.js
1.簡單認識一下Vue.js
-
Vue (讀音 /vjuː/,類似於 view),不要讀錯。
-
Vue是一個漸進式的框架,什麼是漸進式的呢?
- p漸進式意味著你可以將Vue作為你應用的一部分嵌入其中,帶來更豐富的交互體驗。
- 或者如果你希望將更多的業務邏輯使用Vue實現,那麼Vue的核心庫以及其生態系統。
- 比如Core+Vue-router+Vuex,也可以滿足你各種各樣的需求。
-
Vue有很多特點和Web開發中常見的高級功能
- 解耦視圖和數據
- 可復用的組件
- 前端路由技術
- 狀態管理
- 虛擬DOM
2.Vue.js的安裝
使用一個框架,我們第一步要做什麼呢?安裝下載它
安裝Vue的方式有很多:
方式一:直接CDN引入
<!-- 開發環境版本,包含了有幫助的命令行警告 -->
<script src="//cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生產環境版本,優化了尺寸和速度 -->
<script src="//cdn.jsdelivr.net/npm/vue"></script>
方式二:下載和引入
開發環境 //vuejs.org/js/vue.js
生產環境 //vuejs.org/js/vue.min.js
方式三:NPM安裝
後續通過webpack和CLI的使用,我們使用該方式。
3.Vue初體驗
我們來做我們的第一個Vue程式,體驗一下Vue的響應式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="app">{{message}}</div>
</body>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
message: '你好呀'
}
})
</script>
</html>
運行這段程式,我們可以在瀏覽器中看到你好呀
,那麼這段程式做了些什麼,為什麼可以顯示出來?
我們來閱讀JavaScript程式碼,會發現創建了一個Vue對象。
創建Vue對象的時候,傳入了一些options:{}
{}中包含了el屬性:該屬性決定了這個Vue對象掛載到哪一個元素上,很明顯,我們這裡是掛載到了id為app的元素上
{}中包含了data屬性:該屬性中通常會存儲一些數據
-
這些數據可以是我們直接定義出來的,比如像上面這樣。
-
也可能是來自網路,從伺服器載入的。
瀏覽器執行程式碼的流程:
執行到10~13行程式碼顯然出對應的HTML
執行第16行程式碼創建Vue實例,並且對原HTML進行解析和修改。
4.Vue中的MVVM
View層:
- 視圖層
- 在我們前端開發中,通常就是DOM層。
- 主要的作用是給用戶展示各種資訊。
Model層:
- 數據層
- 數據可能是我們固定的死數據,更多的是來自我們伺服器,從網路上請求下來的數據。
- 在我們上面的案例中,就是裡面的data區域,當然,裡面的數據可能沒有這麼簡單。
VueModel層:
- 視圖模型層
- 視圖模型層是View和Model溝通的橋樑。
- 一方面它實現了Data Binding,也就是數據綁定,將Model的改變實時的反應到View中
- 另一方面它實現了DOM Listener,也就是DOM監聽,當DOM發生一些事件(點擊、滾動、touch等)時,可以監聽到,並在需要的情況下改變對應的Data。
我們現在來看一個計數器的案例,幫助我們理解MVVM模型
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<div>當前計數:{{count}}</div>
<button v-on:click="increment">+</button>
<button v-on:click="decrement">-</button>
</div>
</body>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
count: 0
},
methods: {
increment(){
this.count++;
},
decrement(){
this.count--;
}
}
})
</script>
</html>
這個例子很簡單,就是通過點擊按鈕觸發事件,實現對count的加減。那麼在這個案例中MVVM分別對應那塊呢?
View層
下面的這個div就是MVVM中的V
<div id="app">
<div>當前計數:{{count}}</div>
<button v-on:click="increment">+</button>
<button v-on:click="decrement">-</button>
</div>
Model層
data: {
count: 0
},
ViewModel
ViewModel就是我們創建出來Vue實例
5.Vue實例中的options
你會發現,我們在創建Vue實例的時候,傳入了一個對象options。
el: '#app',
data: {
count: 0
},
methods: {
increment(){
this.count++;
},
decrement(){
this.count--;
}
}
這些參數表示什麼意思呢?為什麼要傳入這些參數,還可以傳入其他的參數嗎?初學者應該都會有這樣的疑問
這個options中可以包含哪些選項呢?
關於這個options的詳細參數可以看官網文檔的介紹,裡面包含了所有的參數與介紹,具體的參數含義我們會在後面用到的時候再具體介紹。
//cn.vuejs.org/v2/api/#%E9%80%89%E9%A1%B9-%E6%95%B0%E6%8D%AE
這裡我們先來看我們案例中遇到的參數。
el:
類型:string | HTMLElement
作用:決定之後Vue實例會管理哪一個DOM。
data:
類型:Object | Function (組件當中data必須是一個函數)
作用:Vue實例對應的數據對象。
methods:
類型:{ [key: string]: Function }
作用:定義屬於Vue的一些方法,可以在其他地方調用,也可以在指令中使用。