亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Vue.js構(gòu)建單頁面GIS應(yīng)用的方法研究

        2018-06-06 10:17:30鄧雯婷
        科技創(chuàng)新與應(yīng)用 2018年14期

        鄧雯婷

        摘 要:隨著單頁Web應(yīng)用開發(fā)技術(shù)的不斷完善,越來越多的Web應(yīng)用都采用了單頁應(yīng)用模式。文章詳細(xì)介紹了基于Vue構(gòu)建單頁面應(yīng)用的系統(tǒng)架構(gòu)、關(guān)鍵技術(shù),并以閔行區(qū)基于航拍影片的建設(shè)用地核對項(xiàng)目為例,搭建了閔行區(qū)地塊認(rèn)定工作成果展示系統(tǒng),為開發(fā)人員搭建單頁面GIS應(yīng)用提供了一種新的解決方案。

        關(guān)鍵詞:單頁Web應(yīng)用;Vue;前端路由;Vuex

        中圖分類號:P217 文獻(xiàn)標(biāo)志碼:A 文章編號:2095-2945(2018)14-0005-04

        Abstract: With the continuous improvement of technology in single-page Web application development, more and more Web applications have adopted a single-page application model. This paper introduces the system architecture and key technology of constructing single-page Web application, and taking the check project of drone film-based construction land in Minhang District as an example, builds a data display system, thus providing a new solution to constructing single-page web GIS application for developers.

        Keywords: single-page Web application; Vue; front-end routing; Vuex

        1 概述

        近幾年來單頁Web應(yīng)用迅速崛起,涌現(xiàn)了多種適合開發(fā)單頁Web應(yīng)用的框架,如Backbone.js、Angular.js、Vue.js等,越來越多的Web應(yīng)用也都采用了單頁應(yīng)用模式。

        當(dāng)前對GIS系統(tǒng)的設(shè)計(jì)開發(fā),無論是桌面端系統(tǒng),還是平板電腦上的擴(kuò)展應(yīng)用,大多數(shù)GIS應(yīng)用主要是圍繞核心地圖控件實(shí)現(xiàn)相關(guān)操作,可以說GIS應(yīng)用系統(tǒng)天生就是單頁Web應(yīng)用。那么是不是可以嘗試構(gòu)建單頁面GIS應(yīng)用呢?本文選擇了2016年在GitHub最受歡迎的前端框架Vue.js,對基于Vue構(gòu)建單頁面GIS應(yīng)用進(jìn)行了嘗試,并結(jié)合上海市閔行區(qū)基于航拍影像的建設(shè)用地核對項(xiàng)目構(gòu)建了一個(gè)簡單的單頁面GIS應(yīng)用,主要實(shí)現(xiàn)圖層控制、查詢、量測等基本GIS功能。

        2 核心概念

        2.1 單頁Web應(yīng)用

        單頁Web應(yīng)用(single page web application),縮寫為SPA。它是指在瀏覽器中運(yùn)行的應(yīng)用,它們在使用期間不會重新加載頁面。像所有的應(yīng)用一樣,它旨在幫助用戶完成任務(wù),比如“編寫文檔”或者“管理Web服務(wù)器”??梢哉J(rèn)為單頁應(yīng)用是一種從Web服務(wù)器加載的富客戶端。[1]它將所有的活動(dòng)局限在一個(gè)Web頁面中,所有業(yè)務(wù)功能都是其子模塊,這些子模塊通過特定的方式掛接到頁面中,當(dāng)頁面初始化時(shí)一次性加載相應(yīng)的HTML、JavaScript和CSS,加載完成后SPA不會因?yàn)橛脩舻牟僮鞫匦录虞d頁面或是跳轉(zhuǎn),后續(xù)通過Ajax異步請求數(shù)據(jù),利用JavaScript動(dòng)態(tài)的變換HTML的內(nèi)容(主要采用的是div的切換顯示與隱藏),從而實(shí)現(xiàn)較為流暢的用戶交互與用戶體驗(yàn)。

        2.2 Vue生態(tài)系統(tǒng)

        Vue并不是一個(gè)獨(dú)立的Vue.js文件,它是一套用于構(gòu)建用戶界面的漸進(jìn)式框架,擁有相對完備的生態(tài)系統(tǒng),包含核心vue.js庫,快速搭建應(yīng)用程序的腳手架vue-cli,負(fù)責(zé)路由管理的Vue Router,以及進(jìn)行狀態(tài)管理的Vuex,下面將主要介紹Vue.js、Vue Router和Vuex。

        2.2.1 Vue.js的主要特點(diǎn)

        Vue.js是一個(gè)JavaScript MVVM庫(Model/View/ViewModel),是一套構(gòu)建用戶界面的漸進(jìn)式框架[2],其主要特點(diǎn)包括:(1)響應(yīng)式數(shù)據(jù)綁定;(2)組件式應(yīng)用構(gòu)建。Vue.js提供了更加簡潔、更易于理解的API。使用Vue.js可以去除繁瑣的DOM操作,只需要關(guān)注數(shù)據(jù)的源頭,而不用擔(dān)心DOM元素變化之后的綁定變化。[3]

        數(shù)據(jù)綁定:Vue能將數(shù)據(jù)和DOM綁定在一起,建立數(shù)據(jù)與DOM間的關(guān)聯(lián),頁面中所有的元素都是響應(yīng)式的。下面以Vue提供的v-model指令,簡要解釋一下Vue的雙向數(shù)據(jù)綁定效果。不難發(fā)現(xiàn),當(dāng)使用v-model指令進(jìn)行數(shù)據(jù)綁定時(shí),修改message的值會使得綁定了message特性的HTML發(fā)生變化,反之亦然。

        組件系統(tǒng):是Vue的另一個(gè)重要概念,它允許開發(fā)人員使用小型、自包含和通??蓮?fù)用的組件構(gòu)建大型應(yīng)用。在Vue里,一個(gè)組件本質(zhì)上是一個(gè)擁有預(yù)定義選項(xiàng)的一個(gè)Vue實(shí)例,并采用注冊的方式使用Vue組件。本文在利用Vue構(gòu)建單頁面GIS應(yīng)用時(shí)也將采用組件開發(fā)方式,通過組件的可復(fù)用性來提高GIS系統(tǒng)的開發(fā)效率。

        2.2.2 Vue Router路由管理

        傳統(tǒng)的多頁面Web應(yīng)用是以頁面為單位的,路由管理一般由服務(wù)端統(tǒng)一管理,當(dāng)用戶提出服務(wù)請求后,服務(wù)器將依據(jù)路由規(guī)則返回用戶請求的頁面。但是在單頁面應(yīng)用中,這就成了問題,因?yàn)槌绦蛑挥幸粋€(gè)頁面,這時(shí)需要采用前端路由。

        vue-router是Vue官方提供的路由,它與Vue.js是深度整合的,適合于構(gòu)建單頁Web應(yīng)用。當(dāng)引入vue-router后,開發(fā)人員需要做的是將組件映射到路由,然后告訴vue-router渲染規(guī)則。當(dāng)應(yīng)用程序是由多層嵌套的組件組合而成時(shí),vue-router也支持嵌套路由配置,以實(shí)現(xiàn)嵌套組件間正確的路由傳遞。

        2.2.3 Vuex狀態(tài)管理

        Vuex是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理用于的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。[4]

        在采用Vue.js進(jìn)行組件式開發(fā)時(shí),組件之間的作用域是相互獨(dú)立的,而且組件之間經(jīng)常需要傳遞數(shù)據(jù),而且涉及的組件越多,管理起來就越復(fù)雜,Vuex就是為了幫助開發(fā)者更好地管理狀態(tài)。

        Vuex使用單一狀態(tài)樹,用一個(gè)store(倉庫)對象包含全部的應(yīng)用層級狀態(tài),并作為該應(yīng)用的唯一數(shù)據(jù)源而存在,也就是說每個(gè)應(yīng)用將包含且僅包含一個(gè)store實(shí)例。Vuex采用Getters函數(shù)在組件內(nèi)部獲取store中的狀態(tài)(或理解為Vue組件數(shù)據(jù)),通過提交mutations驅(qū)動(dòng)狀態(tài)的變化,修改store中的狀態(tài),使用Actions在組件內(nèi)部分發(fā)mutations事件函數(shù)。Vuex應(yīng)用內(nèi)部的數(shù)據(jù)流動(dòng)如圖4所示,從組件出發(fā),Vue組件調(diào)用Actions,用于和后臺API交互,獲取數(shù)據(jù)源,采用Actions派發(fā)Mutation用于觸發(fā)組件狀態(tài)的改變,由于store是響應(yīng)式的,所以任何狀態(tài)的改變都將引發(fā)組件的同步更新,展現(xiàn)給用戶的就是視圖的更新。

        圖4 Vuex內(nèi)部數(shù)據(jù)流動(dòng)示意圖[4]

        3 場景實(shí)現(xiàn)

        本文將以閔行區(qū)基于航拍影片的建設(shè)用地核對項(xiàng)目為例,基于Vue搭建單頁面GIS應(yīng)用程序閔行區(qū)地塊認(rèn)定工作成果展示系統(tǒng)。本文主要關(guān)注前端數(shù)據(jù)展示及功能實(shí)現(xiàn),因此假定已實(shí)現(xiàn)了后臺API的編寫,可直接從服務(wù)器端獲取所需的數(shù)據(jù)。

        3.1 開發(fā)環(huán)境

        本項(xiàng)目使用VS Code作為代碼編輯器,使用vue-cli 快速生成模板的Vue工程,其中vue.js為核心JavaScript庫,vue-router.js為路由管理庫,vuex.js為狀態(tài)管理。

        3.1.1 安裝vue-cli

        vue-cli是vue官方發(fā)布的項(xiàng)目腳手架,可以幫助我們快速創(chuàng)建vue項(xiàng)目。在安裝vue-cli之前,需要首先安裝node環(huán)境。安裝完成后,可以在命令行工具中輸入node -v查看是否能顯示版本號,若可以就說明node安裝成功。

        安裝完node之后,通過在命令行工具中輸入npm install-g vue-cli安裝vue-cli。

        3.1.2 創(chuàng)建項(xiàng)目

        在命令行工具中輸入vue init webpack MhProject,使用vue-cli依據(jù)現(xiàn)有模板創(chuàng)建vue項(xiàng)目。使用的模板名為webpack,新建的項(xiàng)目名稱為MhProject。這里我選擇了同時(shí)安裝vue-router,也可以采用3.1.3中所述方式。

        3.1.3 安裝必要模塊

        在命令行工具中輸入npm install vue-router安裝vue-router。

        在命令行工具中輸入npm install vuex安裝vuex。

        3.2 項(xiàng)目組件設(shè)計(jì)

        閔行區(qū)地塊認(rèn)定工作成果展示系統(tǒng)的主要功能模塊包括:地圖瀏覽、圖層控制、空間量測、空間定位、數(shù)據(jù)檢索,也是GIS系統(tǒng)的基本功能。

        依據(jù)功能模塊的劃分將設(shè)計(jì)創(chuàng)建對應(yīng)組件:(1)根組件App.vue;(2)地圖組件Map.vue;(3)操作欄組件Toolbar.vue;(4)圖層控制組件Layer.vue;(5)空間量測組件Measure.vue;(6)空間定位組件Locate.vue;(7)數(shù)據(jù)查詢組件Query.vue。其中,App.vue為根組件存放在項(xiàng)目源代碼src目錄下,其他組件為子組件存放在項(xiàng)目源代碼src目錄下的components子目錄中。導(dǎo)入組件的語法為:

        import Map from './components/Map'

        import Toolbar from './components/Toolbar'

        import Layer from './components/Layer'

        import Measure from './components/Measure'

        import Locate from './components/Locate'

        import Query from './components/Query'

        vue中組件均由三部分組成,分別是(1)template:由html標(biāo)簽組成,用于規(guī)定組件的頁面結(jié)構(gòu);(2)script:存儲組件要引入的其他js模塊和需要執(zhí)行的函數(shù);(3)style:組件相關(guān)的css樣式,通過scope標(biāo)簽限定css的域?yàn)楫?dāng)前組件。

        3.3 狀態(tài)控制

        在vue項(xiàng)目中通過引入vuex,進(jìn)行數(shù)據(jù)狀態(tài)管理。在GIS程序開發(fā)過程中,需要經(jīng)常維護(hù)不同組件的狀態(tài),例如執(zhí)行查詢操作時(shí)需要將設(shè)定鼠標(biāo)指針演示,同時(shí)需要禁用繪圖、量測等組件的鼠標(biāo)點(diǎn)擊響應(yīng)事件,這是一項(xiàng)及其復(fù)雜而易出錯(cuò)的操作。在vue中,使用vuex保證不同組件間的數(shù)據(jù)同步,通過數(shù)據(jù)的自動(dòng)雙向綁定,進(jìn)而控制組件狀態(tài)的自動(dòng)切換,在此過程中,開發(fā)人員僅需要關(guān)注數(shù)據(jù)狀態(tài)的維護(hù)。

        具體實(shí)現(xiàn)方式是:通過命令Vue.use(Vuex)在程序啟動(dòng)時(shí)引入vuex,同時(shí)在項(xiàng)目源代碼src目錄下的store子目錄中,設(shè)定vuex的主程序入口index.js,并將vuex核心的action、mutation引入程序中。

        3.4 實(shí)現(xiàn)效果

        閔行區(qū)地塊認(rèn)定工作成果展示系統(tǒng)只是一次初步嘗試,主要實(shí)現(xiàn)了地圖瀏覽、圖層控制、數(shù)據(jù)檢索、空間量測、空間定位等基本功能,尚有許多可補(bǔ)充和完善的地方:例如可進(jìn)一步擴(kuò)展組件功能,通過歸納和總結(jié),開發(fā)一些具有通用性的GIS組件以供開發(fā)人員重復(fù)利用,如通用的地圖打印輸出組件、優(yōu)化的空間量測組件等;在UI設(shè)計(jì)方面選用一些成熟的UI組件庫如Bootstrap、NEJ、iView等,讓W(xué)eb應(yīng)用擁有更美觀的界面,讓用戶獲得更良好的交互體驗(yàn)。

        4 結(jié)束語

        由于GIS應(yīng)用多以地圖為核心,主要是圍繞地圖實(shí)現(xiàn)相關(guān)的應(yīng)用操作,因此使用單頁面技術(shù)進(jìn)行GIS應(yīng)用開發(fā)在技術(shù)上可行的,在向移動(dòng)端應(yīng)用拓展方面也具有良好的可擴(kuò)展性。在單頁面Web應(yīng)用構(gòu)建過程中,數(shù)據(jù)的綁定是一項(xiàng)復(fù)雜的工作,不僅需要數(shù)據(jù)的初始化,而且需要對數(shù)據(jù)變化后的狀態(tài)進(jìn)行跟蹤和調(diào)整,采取常規(guī)的JavaScript技術(shù)對頁面的DOM進(jìn)行操作(如jQuery、dojo等),不僅工作量大而且容易出錯(cuò),因此采用基于的vue的MVVM前端框架進(jìn)行數(shù)據(jù)模型綁定,同時(shí)使用Vue生態(tài)系統(tǒng)中的各類豐富擴(kuò)展組件,進(jìn)行數(shù)據(jù)狀態(tài)維護(hù)、自定義模塊化開發(fā)、前端樣式庫引入等,不僅可以提高程序的可維護(hù)性,而且可以簡化代碼編寫強(qiáng)度,大幅提高系統(tǒng)開發(fā)效率。

        參考文獻(xiàn):

        [1]Michael S. Mikowski, Josh C. Powell.單頁Web應(yīng)用 JavaScript從前端到后端[M].包勇明,譯.北京:人民郵電出版社,2014.

        [2]Vue.js漸進(jìn)式JavaScript框架[EB/OL].http://cn.vuejs.org.

        [3]麥冬,陳濤,梁宗灣.輕量級響應(yīng)式框架Vue.js應(yīng)用分析[J].計(jì)算機(jī)工程應(yīng)用技術(shù),2017(7):58-59.

        [4]Vuex[EB/OL].https://vuex.vuejs.org/zh-cn/index.html.

        久久亚洲日韩精品一区二区三区| 日韩精品极品在线观看视频| 亚洲综合AV在线在线播放| 无遮挡很爽视频在线观看| 亚洲自拍偷拍一区二区三区 | 熟妇人妻AV中文字幕老熟妇| 综合图区亚洲另类偷窥| 中文字幕中文字幕777| 国产视频一区二区三区在线免费 | 青草青草伊人精品视频| 天堂麻豆精品在线观看| 体验区试看120秒啪啪免费| 中文无码乱人伦中文视频在线v| 亚洲V在线激情| 日韩亚洲精选一区二区三区| 精人妻无码一区二区三区| 亚洲熟女乱色一区二区三区| 无码高清视频在线播放十区| av网站免费观看入口| 玩弄人妻少妇精品视频 | 久久精品国产亚洲一区二区| 高潮av一区二区三区| 婷婷四虎东京热无码群交双飞视频 | 亚洲熟少妇在线播放999| 久久精品成人免费观看97| 国产无卡视频在线观看| 亚洲人成网网址在线看| 自拍偷自拍亚洲精品播放| 伊人影院在线观看不卡| 一区二区三区国产在线视频| 国产成人一区二区三区影院动漫| 亚洲αⅴ无码乱码在线观看性色| 中文亚洲一区二区三区| 色一情一乱一伦麻豆| 中文在线а√天堂官网| 国产一区二区三区四区色| 精品国产一区二区三区不卡在线| 免费a级毛片永久免费| 国产综合精品久久亚洲| 亚洲国产成人va在线观看天堂| 人妻尝试又大又粗久久|