国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Vue2.x 總結(jié)

banana_pi / 1617人閱讀

摘要:結(jié)果對象語法。當(dāng)然,使用并不是首選,只有在構(gòu)建中大型單頁面應(yīng)用時,考慮到全局的狀態(tài)管理,自然就會想到。頁面路由使用創(chuàng)建單頁面應(yīng)用,就可以使用目前版本是,把組件映射到對應(yīng)的路由,通過改變來渲染不同的頁面。

Vue2.x 總結(jié)
Vue 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架

也意味著,既可以把VUE作為該應(yīng)用的一部分嵌入到一個現(xiàn)成的服務(wù)端應(yīng)用,或者在前后端分離的應(yīng)用中,利用Vue 的核心庫及其生態(tài)系統(tǒng),把更多的邏輯放在前端來實現(xiàn)。

A Progressive Framework

漸進(jìn)式框架

與Vue相比,React學(xué)習(xí)曲線陡峭,在學(xué)習(xí)React之前,需要了解JSX和ES2015,當(dāng)然入門后,發(fā)現(xiàn)還要學(xué)習(xí)React全家桶。而Vue就可以在簡單閱讀了文檔后,開始構(gòu)建應(yīng)用程序。

這就要得益于Vue主張的 漸進(jìn)式
可以簡單看下官方給出這張圖:

可以看出來,主要是介紹了Vue設(shè)計思想,就是框架做分層設(shè)計,每層都可選,可以多帶帶引入,為不同的業(yè)務(wù)需求制定靈活的方案。主張最少,不會多做職責(zé)以外的事。

Vue作者尤雨溪的觀點,Vue設(shè)計上包括的解決方案很多,但是使用者完全不需要一上手,就把所有東西全都用上,因為完全沒有必要,一般都是根據(jù)項目的復(fù)雜度,在核心的基礎(chǔ)上任意選用其他的部件,不一定要全部整合在一起。

這樣漸進(jìn)式的解決方案,使得學(xué)習(xí)成本大大減少了。

聲明式渲染

也就是說,DOM狀態(tài)只是數(shù)據(jù)狀態(tài)的一個映射,基本所有的框架都已經(jīng)認(rèn)同了這個看法,Vue也是主張 數(shù)據(jù)驅(qū)動狀態(tài)

說到這里,基本都會提到現(xiàn)在主流的MVVM的模式。

采用了雙向數(shù)據(jù)綁定的思想,基本可以分為三層:

M(Model,模型層),負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)相關(guān)。

V(View,視圖層),視圖相關(guān),展示給用戶的交互界面,同時捕獲用戶的操作

VM(ViewModel, V與M連接的橋梁,也可以看做控制器)。

基于這個思想,Vue從一開始就利用ViewModel與view,model進(jìn)行交互

ViewModel是Vue.js的核心,它是一個Vue實例,作用在某個HTML元素上,一般都是指定 id= app的元素,圖中 的DOM listenersData Bindings可以看做兩個工具,它們是實現(xiàn)雙向數(shù)據(jù)綁定的關(guān)鍵。

從用戶(View)角度看,DOM Liisteners利用在相應(yīng)的元素上添加事件綁定,捕獲用戶的點擊,滑動等手勢動作,在事件流中改變對應(yīng)的Model。比如 常用的 v-model 指令,就是捕獲表單元素的inputchange等事件,改變相應(yīng)的綁定值。

從Model方向看,Data Bindings則將操作的數(shù)據(jù)變化,反應(yīng)到view上。比如通過ajax 從后臺獲取的數(shù)據(jù),可以刷新數(shù)據(jù)列表,反應(yīng)到用戶界面。這也是實現(xiàn)雙向數(shù)據(jù)綁定的關(guān)鍵。

Vue2中是通過Object.definedProperty方法中定義的getters和 setters構(gòu)造器來實現(xiàn)數(shù)據(jù)響應(yīng)的。可以簡化下源碼中的實現(xiàn):

   Object.defineProperty(obj, key, {
         enumerable: true,
         configurable: true,
         get: function reactiveGetter () {
            return value
         },
         set: function reactiveSetter (newVal) {
             var value = getter ? getter.call(obj) : val;
             /* eslint-disable no-self-compare */
             if (newVal === value || (newVal !== newVal && value !== value)) {
               return
             }
             /* eslint-enable no-self-compare */
             if ("development" !== "production" && customSetter) {
               customSetter();
             }
             if (setter) {
               setter.call(obj, newVal);
             } else {
               val = newVal;
             }
             childOb = !shallow && observe(newVal);
             dep.notify();
           }
       });
   }

通過這種方法定義對象obj上的某個屬性,每次獲取屬性值的時候就,會主動觸發(fā)get對應(yīng)的回調(diào)函數(shù),然后給該屬性賦值時,就會觸發(fā)里面的set對應(yīng)的回調(diào)函數(shù),在set回調(diào)函數(shù)里面,加入了dep.notify()方法,然后可以看下這個方法

notify () {
 // stabilize the subscriber list first
 const subs = this.subs.slice()
 for (let i = 0, l = subs.length; i < l; i++) {
   subs[i].update()
 }
}

里面的定義的常量subs每次深拷貝this.subs數(shù)組,數(shù)組里面保存的就是所有的subscriber訂閱者,對應(yīng)的發(fā)布者就是obj里面對應(yīng)的屬性,或者說是Vue中的data值。通知所有的訂閱者,數(shù)據(jù)更新了。原生js實現(xiàn)發(fā)布訂閱模式(publish/Subscribe),可以參考這里

常用基礎(chǔ)語法 hello world
  
  
    
      
      hello world
      
    
    
      
{{message}}

這樣就簡單創(chuàng)建了一個Vue 應(yīng)用,數(shù)據(jù)message 和DOM頁面產(chǎn)生了關(guān)聯(lián),類似html模板引擎,把相應(yīng)的數(shù)據(jù)渲染到頁面中。

指令

指令 (Directives) 是帶有 v- 前綴的特殊屬性,這些特殊屬性可以響應(yīng)式的作用域DOM,

v-if 接受Boolean 類型,比如:

現(xiàn)在你看到我了

,通過seen的真假來插入/移除< p>元素。 這里判斷的時候使用 === 全等,seen = “false” 的時候,也會插入

v-bind,響應(yīng)式的更新HTM屬性。完整形式... 。 縮寫形式...。 常用于改變dom的style, class ,href ,src 等屬性。 動態(tài)綁定的屬性可以寫成 :屬性名="屬性值"

v-on,綁定點擊事件,比如 完整形式...,簡寫形式 ..., doSomething對應(yīng)的指向methods里面定義的函數(shù)。 注意,除非在需要傳遞參數(shù)的時候,寫成 @click = "doSomething($event,args1,args2)",$event代表事件對象,args代表自定義參數(shù)

style or class

v-bind用于classstyle時,Vue.js做了專門的增強(qiáng),表達(dá)式結(jié)果的類型除了字符串之外,還可以是對象或數(shù)組。

綁定HTML Class

直接賦值。

< div :class="className"> 
data:{ className:"div-class" }

結(jié)果:

   

對象語法。

   < div class="static" :class="{active:isActive,"text-danger":hasError}" />
data: { isActive:true, hasError:false, }

結(jié)果:

 

數(shù)組語法,

  
data:{ bTwo:true }