Vue是什麼
引用官方的一段話
Vue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計爲可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易於上手,還便於與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue 也完全能夠爲複雜的單頁應用提供驅動。
什麼是漸進式
引用一個知乎的回答
在我看來,漸進式代表的含義是:主張最少。
每個框架都不可避免會有自己的一些特點,從而會對使用者有一定的要求,這些要求就是主張,主張有強有弱,它的強勢程度會影響在業務開發中的使用方式。比如說,Angular,它兩個版本都是強主張的,如果你用它,必須接受以下東西:
- 必須使用它的模塊機制
- 必須使用它的依賴注入
- 必須使用它的特殊形式定義組件(這一點每個視圖框架都有,難以避免)
所以Angular是帶有比較強的排它性的,如果你的應用不是從頭開始,而是要不斷考慮是否跟其他東西集成,這些主張會帶來一些困擾。
比如React,它也有一定程度的主張,它的主張主要是函數式編程的理念,比如說,你需要知道什麼是副作用,什麼是純函數,如何隔離副作用。它的侵入性看似沒有Angular那麼強,主要因爲它是軟性侵入。
你當然可以只用React的視圖層,但幾乎沒有人這麼用,爲什麼呢,因爲你用了它,就會覺得其他東西都很彆扭,於是你要引入Flux,Redux,Mobx之中的一個,於是你除了Redux,還要看saga,於是你要糾結業務開發過程中每個東西有沒有副作用,純不純,甚至你連這個都可能不能忍:const getData = () => {
// 如果不存在,就在緩存中創建一個並返回
// 如果存在,就從緩存中拿
}因爲你要糾結它有外部依賴,同樣是不加參數調用,連續兩次的結果是不一樣的,於是不純。
現在我要說說爲什麼我這麼支持Vue了,沒什麼,可能有些方面是不如React,不如Angular,但它是漸進的,沒有強主張,你可以在原有大系統的上面,把一兩個組件改用它實現,當jQuery用;也可以整個用它全家桶開發,當Angular用;還可以用它的視圖,搭配你自己設計的整個下層用。你可以在底層數據邏輯的地方用OO和設計模式的那套理念,也可以函數式,都可以,它只是個輕量視圖而已,只做了自己該做的事,沒有做不該做的事,僅此而已。漸進式的含義,我的理解是:沒有多做職責之外的事。
另外,還有一篇較早期的InfoQ文章寫的也非常不錯:《Vue 2.0——漸進式前端解決方案》
最簡單的使用方式
想使用vue很簡單,寫一個index.html,然後引入vue.js便可以使用了,真的是零門檻起步,最簡單的示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<body>
<div id="app1">
{{ message }}
</div>
<script>
var app1 = new Vue({
el: '#app1',
data: {
message: 'Hello Vue!'
}
})
</script>
</body>
</html>
這裏vue用起來感覺跟模板引擎差不多,實際上,據說vue在插值處理上就是使用了Mustache模板引擎。當然這是最簡單的起步示例,工程化的項目是不建議這樣直接在頁面上寫的,而是要組件化模塊化,而這也正體現了vue的漸進式,隨手便可以用起來,不需要過多的操作和配置(跟之前接觸angular的時候比真是太容易了)。
這段代碼有一點需要注意的便是順序,body
內的script
腳本必須在div
的下方
通過Demo接觸到的一些功能
{{ }}
方式插值- 通過
v-bind
、v-if
、v-for
、v-on
等指令的使用,來控制dom的屬性、結構和交互 - 通過使用
v-model
來實現雙向綁定這裏遇到個問題,按照官方的例子,
v-model
似乎是綁定到了dom元素的value
屬性上,那對於select
和checkbox
這樣的元素呢?一番探索後還是在官網找到了解釋:
v-model 在內部爲不同的輸入元素使用不同的屬性並拋出不同的事件:- text 和 textarea 元素使用 value 屬性和 input 事件;
- checkbox 和 radio 使用 checked 屬性和 change 事件;
- select 字段將 value 作爲 prop 並將 change 作爲事件。
- vue組件,組件也是一個vue實例,有兩個屬性可定義:
template
和props
,vue組件是支持嵌套的
總結
OK,簡單的上手,大概的熟悉了一些基礎的概念,初印象還不錯,一直聽說很輕很容易上手,今日看來,確實所言非虛(雖然是刻意沒有使用vue-cli來操作),下次深入去了解Vue實例的概念。