Vue 是如今最火的前端JavaScript 開發框架。
首先,接受它的思想
View 模板即html,靜態界面
Model 數據源 模型 界面全部的數據負責提供及管理
Vue 負責將view 及 Model結合起來。javascript
<div id="app"> {{message}} </div> <script type="text/javascript"> var exampleData = { message:'Hello World!' } //exampleData 數據模型 數據和模板組成 new Vue({ el:'#app', data:exampleData }) </script>
id爲app的一段html 即模板,裏面有一個{{message}}表達式等待被填充 {{}} 兩個大括號即Vue 表達式html
var exampleData = { message:'Hello World!' } exampleData模型 提供了view 須要的數據message vue 作什麼呢? 告知雙方,View 的Model 在哪裏, Model 爲哪一個view服務 new Vue({ el:'#app', data:exampleData })
實例化一個Vue 配置參數 el指向html 元素
data參數指向數據前端
**MVVM
Model View ViewMode(vue,el,data)**vue
數據綁定是vue 最核心 也是最酷的一個能力。
咱們能夠將html 與數據綁定起來。 只要數據發生改變,html(view)當即更新,html由form表單等帶來的數據改變,數據相應字段也會發生相應改變。即V-model
一 viewmodel關聯
el:'#app',data:{message:'hello world!'}
div#app{{message}}表達式就會顯示數據模型model裏的message的值 Hello world!java
二 數據綁定
v-model將input 和 message綁在了一塊兒,任何一方的改變都會影響彼此
好比:剛開始,message的值爲hello world input value顯示爲hello world! 數據綁定了 input顯示message的值
接着 input用戶輸入,value 發生了改變,通知數據message更新他的值,雙向互通。react
三 界面的更新
input的輸入,致使message的值更新,#app元素內,任何表達式與message有關的,都將從新計算,斌企鵝自動更新界面。
因此,<p>{{message}}</p>會顯示出實時與input輸入的值同樣。web
指令 綁定在html元素上,相似於屬性的特殊命令,用於加強html的能力
v-if 表達式,true 則輸出 false 不輸出,頁面上不會輸出其html
v-model 雙向數據綁定指令 主要用於form 表單,input 輸入值會傳給數據更新,數據更新會直接在界面數據上反映。ajax
v-show 與v-if 同樣 接受一個boolean 值得表達式,但不同的地方
無論真心急啊都會在頁面上輸出,只是style display:none 而已。數據庫
MVVM核心作的是數據驅動的界面,若是數據是數組怎麼辦?
v-for 負責循環輸出數據到模板上,item in items
循環的數組是 items 當前的對象是item
在循環中item對象的全部屬性均可以使用item.property調用。
items 來自於vue 實例的data數據源
v-on指定 事件監聽指令
v-on:event_type="function_name"
在vue 實例裏有一個methods API 專門用於提供各類方法,
供html調用json
v-for=「(index,n) in 4」
循環指令,執行 4次
index 當前的下標,n爲當前的數字
v-bind:class="{on:(tab==index)}"
簡寫:class
屬性綁定指令,動態屬性輸出
好比.activ,.on
on:(tab == index)
on是要輸出的類名,是常量,:右邊是表達式,若是爲真
則輸出左邊的類,
數據驅動的屬性綁定 改變tab的值就能夠,讓第幾個tab有on 這個類
v-on:mouseover = "setCurrent()"
添加DOM 事件監聽
methods:{ setCurrent:function(index) { this.tab = index; } }
component 組件
組件化思惟是mvvm 最重要的思想,可讓網頁像搭積木同樣的來開發。
react 做爲組件化思惟的先驅 facebook 當年統計的組件多達5w多個。
優勢是:
1 複用 組件化開發的過程就是一個選取組件拼裝的過程
2 易維護 一個組件過期了或者有新的需求直接下架(可拔插)
3 協做 一個開發者負責本身的一些組件
組件化開發適合大型應用
組件語法
<body> <my-component></my-component> //定義一個組件名爲my component Vue.component('my-component',{ //template 屬性 組件的html template:'<div>A custom component!</div>' })
定義在vue實例化以前
Vue.component('組件名稱',option)
template 屬性是基本屬性,用於設置組建的模板,即view
data,methods 等等,其實它跟Vue實例同樣,具備那些複雜的功能
表現
組件的名字 能夠像自定義的html元素同樣,插入html文檔,擴展html的功能
本質上組件就是一堆html代碼的集合,除了html以外,還有數據集交互邏輯,讓這個組件變得功能強大.
本來的html太簡單 功能太貧瘠。
優勢:使用的直觀性
組件時屬於實例的 也多是屬於其餘組件的。
父組件,子組件。。。 組件之間有關係
組件最後經過自定義html的形式掛到vue實例上去 或父組件上去
components 屬性 子組件的集合,
語法是一個json對象
var vm = new Vue({ el:'#app', data:{ }, components:{ 'my-component':Child } })
my-component 是咱們給組件取的別名,html內插入的就是這個名字
Child是咱們的組件。
組件內數據的聲明 與vue 實例數據的聲明有些不一樣,必須爲函數
data:function(){ return{ message:'hello' } }
return 返回一個json 對象
filter 過濾去
在開發中 常常有這樣的需求 數據庫中存放的是原始數據,離咱們顯示的需求,還差那麼一點點。
或者是數據須要整個容,換個形式,filter負責
數據在 | 管道 後將由一個函數來化妝
組件或者實例中 有一個屬性filters 裏面放置filter函數在vue2.0之前 默認提供一些經常使用的過濾器,好比capitalize sortBy
Vue 2.0之後須要自行定義。
能夠自行定義,數據最後顯示的方式。
聲明周期函數
組件有他的聲明週期,即建立先後,銷燬先後
在配置選項中有一些預約義的生命週期函數鉤子,就在相應的週期那一刻會觸發。
好比常常會在組件加載完成後,發起數據請求ajax
放在created 方法中
在組件銷燬前解綁數據源。
v-html 指令用途:用於將數據顯示爲html而不是字符串
Ajax
異步無刷新 網頁技術,一般用於瀏覽器JavaScript 主動向
後端請求數據 並實時更新界面的操做中
Ajax 工程師 RIA富互聯網應用開發工程師
傳統請求 同步
HTTP 請求的過程
網友在瀏覽地址裏輸入url請求後,解析DNS IP地址找到網頁所在的服務器。
通知服務器,須要這個頁面的html
服務器收到請求指令後,去數據庫裏取出數據,動態渲染html模板,最後經過與網友的鏈接
,將網頁字符串發送給瀏覽器,咱們就看到網頁了
Ajax 異步請求
與同步請求不一樣,Ajax 是在網頁已經渲染,跟服務器斷開鏈接後,客戶端JavaScript 經過用戶點擊事件(換一批)鼠標滾動(下一頁)主動向服務器端請求數據
並且並非一直等待結果再執行,而是在服務器端接到指令後,完成運算由服務器端異步的調用callback來繼續 執行頁面邏輯{動態DOM操做}
服務器成功執行,調用callback,
失敗,調用error 不會刷新頁面的就是ajax
一 瀏覽器原生的異步請求對象 XMLHttpRequest
XML 數據的格式 如今主要是JSON
HttpRequest javascript 發出http請求的能力
流程
1 打開請求,這是並無真正發送請求 而是去作了http握手
xhr.open('GET',URL);
URL 是服務器端提供給你取數據的地址,是預約好的。
服務端只須要根據前端的需求,準備好數據,並在預約的地址(URL),
以JSON的格式返回給用戶便可
2 定義回調
xhr.onload = function() { xhr.responseText; }
xhr 請求後服務器端返回的數據,會異步賽道xhr.responseText屬性裏面。
JSON.parse()將返回數據變成json 對象
xhr.send()真正發送請求
xhr的優勢在於,帶來了web2.0革命,傳統了的請求,頁面是靜態的,死板的
而xhr時代的頁面是動態的,富交互的,
$.getJSON(url,params,function(data){ }); $.post(url,params,function(data){ });
平時咱們不會去直接用XMLHttpRequest
input radio 切換後,ajax 的數據操做由watch 方法來負責
watch:{ propertypeName:'函數名' }