1. 程式人生 > >JS元件系列——又一款MVVM元件:Vue(一:30分鐘搞定前端增刪改查)

JS元件系列——又一款MVVM元件:Vue(一:30分鐘搞定前端增刪改查)

正文

前言:關於Vue框架,好幾個月之前就聽說過,瞭解一項新技術之後,總是處於觀望狀態,一直在猶豫要不要系統學習下。正好最近有點空,就去官網瞭解了下,看上去還不錯的一個元件,就抽空研究了下。最近園子裡vue也確實挺火,各種入門博文眼花繚亂,博主也不敢說寫得多好,就當是個學習筆記,有興趣的可以看看。

回到頂部

一、MVVM大比拼

關於MVVM,原來在介紹knockout.js的時候有過講解,目前市面上比較火的MVVM框架也是一抓一大把,比如常見的有Knockout.js、Vue.js、AvalonJSAngularjs等,每一款都有它們自己的優勢。

  • Knockout:微軟出品,可以說是MVVM的模型領域內的先驅,使用函式偷龍轉鳳,最短編輯長度演算法實現DOM的同步,相容IE6,實現高超,但原始碼極其難讀,最近幾年發展緩慢。
  • Vue:是最近幾年出來的一個開源Javascript框架,語法精簡,實現精緻,但對瀏覽器的支援受限,最低只能支援IE9。
  • AvalonJS:是一個簡單易用迷你的MVVM框架,由大神司徒正美研發。使用簡單,實現明快。
  • React:React並不屬於MVVM架構,但是它帶來virtual dom的革命性概念,受限於檢視的規模。
  • Angularjs:Google出品,已經被用於Google的多款產品當中。AngularJS有著諸多特性,最為核心的是:MVC、模組化、自動化雙向資料繫結、語義化標籤、依賴注入等等。入門容易上手難,大量避不開的概念也是很頭疼的。

更多MVVM框架優缺點比較,可以看下 這裡

 。

其實在博主的博文裡面,說得最多的還是那句:任何技術和框架都有它存在的價值和意義!由上也可以看出沒有哪個框架是真正完美的,關鍵看你如何取捨,在你的專案中用好了以上任何一種框架,你就是技術大牛。不過話雖這樣說,博主覺得多瞭解一些框架對我們並無壞處,至少能開闊我們的眼界吧。

回到頂部

二、Vue常用網址

上文說了,Vue是一個開源框架,最新版本已經更新到了2.0,是一個獨立的Javascript框架,不依賴於任何其他框架(例如jquery),下面是博主收集的一些常用網址。

回到頂部

三、Vue基礎入門

回到頂部

1、MVVM圖例

說到MVVM,先來看看下面下面這張圖

這張圖足以說明MVVM的核心功能,在這三者裡面,ViewModel無疑起著重要的橋樑作用。

  • 一方面,通過ViewModel將Model的資料繫結到View的Dom元素上面,當Model裡面的資料發生變化的時候,通過ViewModel裡面資料繫結的機制,觸發View裡面Dom元素的變化;
  • 另一方面,又通過ViewModel來監聽View裡面的Dom元素的資料變化,當頁面上面的Dom元素髮生變化的時候,ViewModel通過Dom樹的監聽機制,觸發對應的Model的資料變化。

當然在Vue.js裡面ViewModel也是核心部件,它就是一個Vue例項。這個例項作用於單個或者多個html元素,從而實現Dom樹監聽和資料繫結的雙向更新操作。

回到頂部

2、第一個Vue例項

關於第一個例項,無疑是最簡單的應用。要使用vue,不用多說,肯定是先去github上面下載原始碼嘍,然後引入到我們的專案中來,需要引用的js就一個vue.js,版本是2.0.5。

先來看一個最簡單的例子:

複製程式碼
<body>
    <div id="app">
        <h1>姓名:{{ Name }}</h1>
        <h1>年齡:{{ Age }}</h1>
        <h1>學校:{{ School }}</h1>
    </div>

    <script src="Content/vue/dist/vue.js"></script>
    <script type="text/javascript">
    //Model
    var data = {
        Name: '小明',
        Age: 18,
        School:'光明小學',
    }

    //ViewModel
    var vue = new Vue({
        el: '#app',
        data: data,
    });
   
    </script>
</body>
複製程式碼

這段程式碼不難理解,我們的Model就是data變數,而ViewModel就是這裡的new Vue()得到的物件。這裡兩個最簡單的屬性相信大家一看就能明白。

  • el:表示繫結的Dom元素,此例子中表示的是父級的Dom元素。
  • data:需要繫結的資料Model。

如果僅僅是展示,只需要 姓名:{{ Name }} 這樣寫就好了。執行的效果如下:

值得一提的是 {{ Name }} 這種寫法僅僅只能實現單向繫結,只有在Model裡面資料發生變化的時候會觸發介面Dom元素的變化,反之並不能觸發Model資料的變化。可以通過瀏覽器的Console來驗證這一理論。

那麼,對於雙向繫結的機制,Vue是如何實現的呢?

回到頂部

3、雙向繫結

vue裡面提供了v-model指令,為我們方便實現Model和View的雙向繫結,使用也非常簡單。還是上文的例子,我們加入一個文字框,裡面使用v-model指令。

複製程式碼
<body>
    <div id="app">
        <h1>編輯姓名:<input type="text" v-model="Name" /></h1>
        <h1>姓名:{{ Name }}</h1>
        <h1>年齡:{{ Age }}</h1>
        <h1>學校:{{ School }}</h1>
    </div>

    <script src="Content/vue/dist/vue.js"></script>
    <script type="text/javascript">
    //Model
    var data = {
        Name: '小明',
        Age: 18,
        School:'光明小學',
    }

    //ViewModel
    var vue = new Vue({
        el: '#app',
        data: data,
    });
    </script>
</body>
複製程式碼

得到效果:

雙向繫結效果展示:

通過v-model指令,很方便的實現了Model和View之間的雙向繫結。單從這種繫結的方式來看,還是比Knockout要簡單一點,至少不用區分什麼普通屬性和監控屬性。

回到頂部

四、常用指令

本來按照Vue文件說明,常用指令應該是放在後面介紹的,但是從使用的層面考慮,先介紹常用指令還是非常必要的,因為博主覺得這些指令是我們入手使用Vue的橋樑,沒有這些基石,一切的高階應用都是空話。

Vue裡面為我們提供的常用指令主要有以下一些。

每一個指令都可以連結到相關文件,博主覺得文件裡面每種指令的語法寫得非常詳細,在此就沒必要重複做說明了,下面博主打算將一些常用的指令以分組的形式分別結合demo來進行解釋說明。

回到頂部

1、v-text、v-html指令

v-text、v-html這兩者分為一組很好理解,一個用於繫結文字,一個用於繫結html。上文使用到的 {{ Name }}這種寫法就是v-text的的縮寫形式。這個很簡單,沒什麼好糾結的,看一個Demo就能明白。

複製程式碼
<body>
    <div id="app">
        <h1>姓名:<label v-text="Name"></label></h1>
        <h1>姓名:{{ Name }}</h1>
        <div style="font-size:30px;font-weight:bold;" v-html="Age">年齡:</div>
    </div>

    <script src="Content/vue/dist/vue.js"></script>
    <script type="text/javascript">
    //Model
    var data = {
        Name: '小明',
        Age: "<label>20</label>",
        School:'光明小學',
    }

    //ViewModel
    var vue = new Vue({
        el: '#app',
        data: data,
    });
    </script>
</body>
複製程式碼

效果如下:

程式碼說明:

  1. {{Name}}這種寫法和v-text的作用是相同的,用於繫結標籤的text屬性。注意如果標籤沒有text屬性,該繫結會失效,比如你在一個文字框上面使用v-text是沒有效果的
  2. 由得到的效果可以看出,v-html繫結後會覆蓋原來標籤裡面的內容(比如上面的“年齡:”),記住此處是覆蓋而非append。
  3. 對於v-html應用的時候要慎重,在網站上動態渲染任意 HTML 有一定的危險存在,因為容易導致 XSS 跨站指令碼攻擊。所以最好是在信任的網址上面使用。
  4. 注意v-text和v-html繫結都是單向的,只能從Model到View的繫結,不能實現View到Model的更新。

相關推薦

JS元件系列——MVVM元件Vue30分鐘前端刪改

正文 前言:關於Vue框架,好幾個月之前就聽說過,瞭解一項新技術之後,總是處於觀望狀態,一直在猶豫要不要系統學習下。正好最近有點空,就去官網瞭解了下,看上去還不錯的一個元件,就抽空研究了下。最近園子裡vue也確實挺火,各種入門博文眼花繚亂,博主也不敢說寫

Go元件學習——gorm四步帶你DB刪改

1、簡介 ORM   Object-Relationl Mapping, 它的作用是對映資料庫和物件之間的關係,方便我們在實現資料庫操作的時候不用去寫複雜的sql語句,把對資料庫的操作上升到對於物件的操作。 gorm   gorm就是基於Go語言實現的ORM庫。   類似於Java生態裡大家聽到過的

JS元件系列——MVVM元件Vue構建自己的Vue元件

前言:轉眼距離上篇 JS元件系列——又一款MVVM元件:Vue(一:30分鐘搞定前端增刪改查) 已有好幾個月了,今天打算將它撿起來,發現好久不用,Vue相關技術點都生疏不少。經過這幾個月的時間,Vue的發展也是異常迅猛,不過這好像和博主都沒什麼太大的關係,博主還是老老實實研究自己的技術吧。技術之路還很長,且行

使用unity製作的生存類遊戲demo

   花了20多天的時間來完成這個demo,主要是為了實現一些自己設想的功能,並未注重關卡和玩法的設計,整體上還不夠完善或者說不夠完整。    demo中的美術資源均來自asset store和各種資源網站。使用的外掛有NGUI,post progressing stack

laravel中的數據庫操作刪改方法

-s delet 增刪 insert 修改 name tro des 命名空間 導入命名空間和DBnamespace App\Http\Controllers;use Illuminate\Support\Facades\DB; public function index

cocos2d-x-lua基礎系列教程六lua-table刪改

{} cat ng-click 位置 rip 腳本 ack content -c lua-table庫 1。插入 table.insert () --假設沒有設定位置。默認last位置 樣例: myTable = {

js 建立連結串列刪改

話說面試又失敗了,今年真是坎坷的一年,女朋友跑了,工作不順,家裡催婚,大學剛畢業,大公司不要。在這個沒錢沒人的年紀,有點小絕望。不多說直接上程式碼: /*======定義結構======*/ var node=function(element){ this.element=element

SpringMVC刪改附原始碼,新手學SpringMVC最好的辦法就是自己寫刪改

最近在自學SpringMVC,有Spring的基礎,但不是很深,僅存在於表面。當前在手書籍有《SpringMVC學習指南》 個人認為學習一種MVC框架時,當入了個門之後可以自己寫一套增刪改查,這樣可以

C#元件系列——日誌元件Elmah的學習和分享

前言:好久沒動筆了,都有點生疏,12月都要接近尾聲,可是這月連一篇的產出都沒有,不能壞了“規矩”,今天還是來寫一篇。最近個把月確實很忙,不過每天早上還是會抽空來園子裡逛逛。一如既往,園子裡每年這個時候都有大把的年終總結、回憶過去展望未來之類的文章。博主是沒時間寫總結了,要學的東西太多。關於Vue的系列一定要抽

C#元件系列——Excel處理神器Spire.XLS,你值得擁有

前言:上篇 C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有 介紹了下元件的兩個功能,說不上特色,但確實能解決我們專案中的一些實際問題,這兩天繼續研究了下這個元件,覺得有些功能用起來還是挺方便的,這篇繼續來看看Spire.XLS的一些其他功能,說不定有你需要的呢~~ 一、基礎入門

C#元件系列——Excel處理神器Spire.XLS,你值得擁有

前言:最近專案裡面有一些對Excel操作的需求,博主想都沒想,NPOI唄,簡單、開源、免費,大家都喜歡!確實,對於一些簡單的Excel匯入、匯出、合併單元格等,它都沒啥太大的問題,但是這次的需求有兩點是NPOI搞不定的: 匯入Excel後,需要切割Excel的Sheet頁,然後每個Sheet頁單獨生成一

JS元件系列——BootstrapTable+KnockoutJS實現刪改解決方案

前言:出於某種原因,需要學習下Knockout.js,這個元件很早前聽說過,但一直沒嘗試使用,這兩天學習了下,覺得它真心不錯,雙向繫結的機制簡直太爽了。今天打算結合bootstrapTable和Knockout去實現一個簡單的增刪改查,來體驗一把神奇的MVVM。關於WebApi的剩餘部分,博主一定抽時間補上。

JS元件系列——兩種bootstrap multiselect元件大比拼[轉載]

轉載原文地址:https://www.cnblogs.com/landeanfen/p/5013452.html 前言:今天繼續來看看bootstrap的另一個元件:multiselect。記得在專案開始之前,博主專案組幾個同事就使用哪些js元件展開過討論,其中就說到了select元件,

JS元件系列——BootstrapTable+KnockoutJS實現刪改解決方案

前言:上篇 JS元件系列——BootstrapTable+KnockoutJS實現增刪改查解決方案(一) 介紹了下knockout.js的一些基礎用法,由於篇幅的關係,所以只能分成兩篇,望見諒!昨天就覺得應該快點完成下篇,要不然有點標題黨的感覺,思及此,博主心有不安,於是加班趕出了下篇。如果你也打算用ko去做

C#進階系列——步封裝自己的HtmlHelper元件BootstrapHelper附原始碼

前言:之前的兩篇封裝了一些基礎的表單元件,這篇繼續來封裝幾個基於bootstrap的其他元件。和上篇不同的是,這篇的有幾個元件需要某些js檔案的支援。 BootstrapHelper系列文章目錄 一、NumberBoxExtensions NumberBoxExtensions是一個基於boot

JS元件系列——BootstrapTable+KnockoutJS實現刪改解決方案兩個Viewmodel刪改

前言:之前博主分享過knockoutJS和BootstrapTable的一些基礎用法,都是寫基礎應用,根本談不上封裝,僅僅是避免了html控制元件的取值和賦值,遠遠沒有將MVVM的精妙展現出來。最近專案打算正式將ko用起來,於是乎對ko和bootstraptable做了一些封裝,在此分享出來供園友們參考。封裝

JS元件系列——BootstrapTable+KnockoutJS實現刪改解決方案自定義T4模板快速生成頁面

前言:上篇介紹了下ko增刪改查的封裝,確實節省了大量的js程式碼。博主是一個喜歡偷懶的人,總覺得這些基礎的增刪改查效果能不能通過一個什麼工具直接生成頁面效果,啥程式碼都不用寫了,那該多爽。於是研究了下T4的語法,雖然沒有完全掌握,但是算是有了一個大致的瞭解,給需要自定義模板的園友們提供一個參考。於是乎有了今天

JS元件系列——兩種bootstrap multiselect元件大比拼

前言:今天繼續來看看bootstrap的另一個元件:multiselect。記得在專案開始之前,博主專案組幾個同事就使用哪些js元件展開過討論,其中就說到了select元件,由於專案的整體風格使用的bootstrap風格,所以在選用select元件的時候優先考慮和bootstrap結合使用的。其中就找到了兩個

JS元件系列——Bootstrap檔案上傳元件bootstrap fileinput

前言:之前的三篇介紹了下bootstrap table的一些常見用法,發現博主對這種扁平化的風格有點著迷了。前兩天做一個excel匯入的功能,前端使用原始的input type='file'這種標籤,效果不忍直視,於是博主下定決心要找一個好看的上傳元件換掉它。既然bootstrap開源,那麼社群肯定有很多關於

spring-boot react步實現刪改 元件

在 spring-boot react一步一步實現增刪改查 中,用一個元件實現了表格和表單功能,所以現在需要將其拆分成元件獨立出來 拆分表格 建立Table.js import React, {Component} from 'react' class Tab