目錄javascript
今天記錄一下最近學習Vue
的一點心得。php
Html
結構,CSS
表現,JS
行爲。css
Array.from(document.styleSheets).forEach(item => item.disabled = false)
前期只是爲了校驗表單,而後發展爲動態效果開發,接着主要負責響應用戶交互,如今頁面數據渲染展現、交互、效果、校驗等多位一體的開發方式。用一張圖表示就這樣的一個關係。html
目前流行的前端框架都是基於Node,Npm,Yarn
的開發方式,好比Vue結合Vue-cli
工具能夠方便的初始化項目,而之前的項目則是手工去新建文件,下載文件,定義項目的入口,而後組織打包方式,而後所有拷貝發佈上線。前端
在沒有npm之前,以下的JS資源:vue
<script src="../js/jquery-1.10.1.min.js"></script> <script src="../js/jquery.cookie.js"></script> <script src="../js/login.js"></script> <script src="../js/jquery.nicescroll.js"></script> <script src="../js/jquery.qrcode.min.js"></script> <script src='../jslib/moment.min.js'></script> <script src='../js/locale/zh-cn.js'></script> <script src="../mobisscroll3/js/mobiscroll.custom-3.0.0-beta2.min.js"></script> <script src='../plugins/layer-pc/layer.js'></script>
全部資源插件都須要從本來不一樣的網站去下載,下載好以後放到項目資源目錄中。隨着項目的開發,時間的推移,若是本地源碼被破壞修改,想從新從官網下載,但官網又更新版本了,或者官網已經失聯,下載起來就比較困難。
兩個問題:下載麻煩,版本管理維護比較困難。java
隨着Node在前端工程中大火,後來內置的NPM(Node Package Manager)
就扮演了資源統一管理這樣的角色,經過本地的Package.json
管理文件名,版本號,命令行進行遠程拉包的方式解決了開發當中處處找資源的窘境,他不但能夠獲取資源,也能夠將本身編寫的包或命令行程序進行發佈分享。
PS: 下載最新的Node安裝包進行安裝,而後分別根據:node -v,npm -v
兩個命令測試是否安裝成功。
PS: call:node call:npmnode
因爲業務需求的不斷增大,Npm
下載了不少個包,這些包如何打包就是一個問題了。同時隨着ES6
的發佈,而瀏覽器支持又不是給力。有些資源開發時用到,但上線後又用不到,好比SCSS
相關的資源。
這時候一個神器Webpack橫空出世,基本解決了前面提到的一些問題,並且還添加了不少新的想法和可能。結合cli工具,使如今的前端開發在工程化領域更加方便,開發更便捷。
其中Babel的劍走偏峯,Webpack-dev-server
的巧妙應用,各類Loader
的百花齊放,共同構築了現代開發的宏偉基礎世界,關於他們的細節故過後續有機會在分享。jquery
Vue是專一於View層的數據雙向綁定框架,核心是MVVM(Model-View-ViewModel)
中的 VM
,也就是 ViewModel
。ViewModel
負責鏈接 View
和Model
,保證視圖和數據的一致性,而且可以實時相互更新,數據影響視圖,視圖中操做影響數據。git
Object.defineProperty()
方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 並返回這個對象。
<div> <p>Hello,<span id="name"></span></p> </div> <script> var user = {} Object.defineProperty(user, 'name', { get: function () { return document.getElementById('name').innerHTML }, set: function (n) { return document.getElementById('name').innerHTML = n } }) </script>
這段代碼保存到本地,而後在控制檯裏邊修改一下user
的屬性,好比:user.name='shanghai'
,看看效果。
而Vue實現有點小複雜,也是面試題必考的環節之一,因此有空的同窗瞭解一下。
Observer
,可以對數據對象的全部屬性進行監聽,若有變更可拿到最新值並通知訂閱者Compile
,對每一個元素節點的指令進行掃描和解析,根據指令模板替換數據,以及綁定相應的更新函數Watcher
,做爲鏈接Observer和Compile的橋樑,可以訂閱並收到每一個屬性變更的通知,執行指令綁定的相應回調函數,從而更新視圖mvvm
入口函數,整合以上三者經過修改數據來達到更新視圖的目的,好比:const User = { name: 'jikey', age: 20 }
,對應頁面上:我是Jikey
,修改:User.name = 'Tang'
,那頁面上自動變爲:我是Jikey
。而若是是jQuery
時代,那得先找到dom
元素,而後在更新,若是這個屬性頁面上有多處,那就須要手工找到全部的進行更新。好比:$('.userEl1, .userEl2').html('Jikey')
等等的方式。
好比公網上有個url:http://www.jing-ui.com,輸入地址欄以後:
CSS
,JS
文件。DOM
樹,CSSOM
樹, 將DOM,CSSOM
合併生成渲染樹,計算渲染樹佈局,而後將佈局渲染到屏幕上。只有首次發起全頁面請求,後續請求服務端返回業務相關JSON數據,由瀏覽器Vue模板來組裝HTML結構,而後渲染到屏幕上。由此能夠看到,只要瀏覽器不帥鍋,性能更好,渲染體驗更好。同時也從新闡明瞭Vue的立場,就是前端框架,與Spring, Struts, Thinkphp這些服務端框架不同,也不具有處理POST請求的能力,只能從拼接的url參數上取值,微信受權就是這種方式獲取OpenId。
內部技術處理上主要是2種方式:
window.addEventListener("hashchange", handleHash, false)
window.addEventListener('popstate', matchAndUpdate) window.history.pushState(stateObject, title, url) window.history.replaceState(stateObject, title, url)。
Vue是基於組件構建前端頁面,多個組件上的數據必須保持同步和一致性,好比管理界面,左側菜單的打開狀態,必須在切換好的頁面中保持當前目錄的展開。用戶頭像必須在每一個頁面都顯示同一的頭像。等等。這時候就須要一個全局變量經過代碼編程的方式方便的管理數據,爲了與業界保持一致,採用了必定的API代表上看起來更繁瑣,隨着項目的增大,API更加的利於數據的管理。
全家桶構建的快速開發體系,Vue-cli初始化項目基礎配置和文件結構,Vuex進行全局的數據狀態管理,Vue-Router進行路由的跳轉與處理。
代表上.vue像是一個新的格式,其實內部已經從開發約定層面規定了開發的入口,不管從teamplate
裏邊的html
,仍是script
裏邊的js
,仍是style
裏邊的css
,都是以一種之前熟悉的內容進行開發。
即能直接以script
的方式引入,也能以.vue的方式進行開發。
從vue
主框架到vue-router
,nuxt
,基本知足了平常的開發。
前期主要是前端基礎的難點,中後期就是項目架構性能的優化和擴展維護。
包括變量類型,流程控制,事件,DOM, BOM
入手的關鍵字
call:es6
主要是增長變量申明,箭頭函數,Promise,Async, Await的支持,加強String,Number,Function,Array,Object等的擴展還有增長模塊管理Exports,Import功能。
先引入Vue主文件,組件文件,而後尋找一個適當的容器裝載Vue渲染後的結果。
id爲app的容器元素。
引入打包以後的dist文件。
結合Vue.js devtools, Chrome Debugger調試。
SSR
渲染框架支持工具Nuxt