淺談Vue.js

来源:http://www.cnblogs.com/luozhihao/archive/2016/03/28/5329440.html
-Advertisement-
Play Games

作為一名Vue.js的忠實用戶,我想有必要寫點文章來歌頌這一門美好的語言了,我給它的總體評價是“簡單卻不失優雅,小巧而不乏大匠”,下麵將圍繞這句話給大家介紹Vue.js,希望能夠激發你對Vue.js的興趣。 Vue.js簡介 Vue.js的作者為Evan You(尤雨溪),任職於Google Cre ...


作為一名Vue.js的忠實用戶,我想有必要寫點文章來歌頌這一門美好的語言了,我給它的總體評價是“簡單卻不失優雅,小巧而不乏大匠”,下麵將圍繞這句話給大家介紹Vue.js,希望能夠激發你對Vue.js的興趣。

Vue.js簡介

Vue.js的作者為Evan You(尤雨溪),任職於Google Creative Lab,雖然是Vue是一個個人項目,但在發展前景上個人認為絕不輸於Google的AngularJs,下麵我會將Vue與Angular(Angular 1.0+版本)做一些簡單的比較。

Vue的主要特點就和它官網(http://cn.vuejs.org/)所介紹的那樣:

(1) 簡潔 (2) 輕量 (3)快速 (4) 數據驅動 (5) 模塊友好 (6) 組件化

簡單

下麵看一段Angular的實現雙向綁定的代碼

// html
<body ng-app="myApp">
    <div ng-controller="myCtrl">
        <p>{{ note }}</p>
        <input type="text" ng-model="note">
    </div>
</body>

// js
var myModule = angular.module('myApp', []);

myModule.controller('myCtrl', ['$scopp', function($scope) {
    $scope.note = '';
]);

 

然後再看一下Vue的代碼

// html
<body>
    <div id="app">
        <p>{{ note }}</p>
        <input type="text" v-model="note">
    </div>
</body>

// js
var vm = new Vue({
    el: '#app',
    data: {
        note: ''
    }
})

 

相比較而言我個人認為Vue的代碼編寫風格更加簡潔,並且通俗易懂。

不失優雅

Vue雖然是一個比較輕量級的框架,簡單輕量的同時還非常的人性化,其提供的API也是非常的容易理解,同時也提供了一些很便捷的指令和屬性。

例如:

(1)綁定click事件

<a v-on:click="doSomething"></a>

可以簡寫為:

<a @click="doSomething"></a>

(2) 綁定動態屬性

<a v-bind:href="url"></a>

可以簡寫為:

<a :href="url"></a>

(3) 便捷的修飾符

<!-- 阻止單擊事件冒泡 -->
<a @click.stop="doSomething"></a>

<!-- 只在按下回車鍵的時候觸發事件 -->
<input @keyup.enter="submit">

(4) 實用的參數特性

<!-- debounce 設置一個最小的延時 -->
<input v-model="note" debounce="500">

<!-- 在 "change" 而不是 "input" 事件中更新數據 -->
<input v-model="msg" lazy>

怎麼樣,是不是感覺優雅極了。

小巧

說起小巧,那應該首先要關註下Vue的源碼大小,Vue的成產版本(即min版)源碼僅為72.9kb,官網稱gzip壓縮後只有25.11kb,相比Angular的144kb縮小了一半。

小巧的一種好處就是可以讓用戶更自由的選擇相應的解決方案,在配合其他庫方面它給了用戶更大的空間。

如Vue的核心預設是不包含路由和 Ajax 功能,但是如果項目中需要路由和AJAX,可以直接使用Vue提供的官方庫Vue-router及第三方插件vue-resource,同時你也可以使用其他你想要使用的庫或插件,如jQuery的AJAX等。

是不是感覺非常的靈活。

不乏大匠

Vue雖然小巧,但是“麻雀雖小五臟俱全”,在構建大型應用的時候也是得心應手。

(1) 模塊化

結合一些第三方模塊構建工具,如CommonJS、RequireJS或者SeaJs,可以輕鬆實現代碼的模塊化。

但是在這裡小編不推薦使用上述構建工具,直接使用ES6的模塊化功能,再結合Webpack進行相應打包是目前最熱門的方案。

不瞭解ES6模塊功能的可以詳見:http://es6.ruanyifeng.com/#docs/module
在今後的文章中,我也會對其進行介紹,包括Webpack的配置。

(2) 組件化

Vue的組件化功能可謂是它的一大亮點,通過將頁面上某一組件的html、CSS、js代碼放入一個.vue的文件中進行管理可以大大提高代碼的維護性。

例如:

// App.vue
<template>
    <div class="box" v-text="note"></div>
</template>

<script>
export default {
    data () {
        return {
            note: '這是一個組件的html模板!'
        }
    }
}
</script>

<style scoped>
.box {
    color: #000;
}
</style>

我們還可以在組件里寫一些預處理語言:

// App.vue
<template lang='jade'>
    div(class="box" v-text="text")
</template>

<script>
export default {
    data () {
        return {
            note: '這是一個組件的html模板!'
        }
    }
}
</script>

<style lang="stylus">
.box 
    color: #000
</style>

當然這樣寫我們是需要通過webpack來進行打包的,推薦使用Webpack + vue-loader的方式,同時使用ES6語法,需要安裝babel來進行轉換。因為文章為淺談Vue.js,所以這裡不做深入介紹。

(3) 路由

和Angular一樣,Vue也具有它的路由功能。通過路由功能,我們可以實現各個組件的按需載入,輕鬆構建單頁應用。下麵是一個簡單的路由配置文件:

// router.js

'use strict'

export default function(router) {
    router.map({
        '/': {
            component: function (resolve) {
              require(['./components/Foo.vue'], resolve)
            }
        },
        '/foo': {
            component: function (resolve) {
              require(['./components/Foo.vue'], resolve)
            }
        },
        '/bar': {
            component: function (resolve) {
              require(['./components/Bar.vue'], resolve)
            }
        }
    })
}

如需查看具體的路由配置及使用,移步官方提供的文檔:http://vuejs.github.io/vue-router/zh-cn/index.html

總結

個人認為前端的一些技術都是融會貫通的,學習一門語言或者框架本身並不是為了學習它的技術,最重要的是學習它的思維,只有思維層面得到了延伸,學習其他技術的時候會發現得心應手。Vue帶給我們的是前端一種解決問題的新的思維。

 

原創文章,轉載請註明來自一個蘿蔔一個坑 -博客園[http://www.cnblogs.com/luozhihao]

本文地址:http://www.cnblogs.com/luozhihao/p/5329440.html

本文同步發表於:https://segmentfault.com/a/1190000004704498


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文鏈接:http://docs.autofac.org/en/latest/lifetime/index.html Lifetime 是指服務的實例在程式中存活多久 – 從最初的實例化到清理(disposal)。例如,一個實現 IDisposable 的對象,它的生命周期就是從實例化時開始,持續到 ...
  • 一、引言 在軟體開發過程中,客戶端程式經常會與複雜系統的內部子系統進行耦合,從而導致客戶端程式隨著子系統的變化而變化,然而為了將複雜系統的內部子系統與客戶端之間的依賴解耦,從而就有了外觀模式,也稱作 ”門面“模式。下麵就具體介紹下外觀模式。 二、外觀模式的詳細介紹 2.1 定義 外觀模式提供了一個統 ...
  • 一、引言 在軟體開發過程中,我們經常會遇到處理簡單對象和複合對象的情況,例如對操作系統中目錄的處理就是這樣的一個例子,因為目錄可以包括單獨的文件,也可以包括文件夾,文件夾又是由文件組成的,由於簡單對象和複合對象在功能上區別,導致在操作過程中必須區分簡單對象和複合對象,這樣就會導致客戶調用帶來不必要的 ...
  • 一、引言 在軟體開發中,我們經常想要對一類對象添加不同的功能,例如要給手機添加貼膜,手機掛件,手機外殼等,如果此時利用繼承來實現的話,就需要定義無數的類,如StickerPhone(貼膜是手機類)、AccessoriesPhone(掛件手機類)等,這樣就會導致 ”子類爆炸“問題,為瞭解決這個問題,我 ...
  • 類的介面分為兩部分 一、良好的抽象 類的介面應該展現一致的抽象層次。每一個類應該實現一個ADT,並且僅僅實現這個ADT。 一定要理解類所實現的抽象是什麼。理解對應的ADT。 提供成對的服務,比如Add、Delete。On、Off等。不要盲目創建相反的操作,但是得考慮是否有需要 把不相關的信息轉移到其 ...
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】A 集成代碼生成器(開發利器); 技術:313596790 增刪改查的處理類,ser ...
  • × 目錄 [1]text-align [2]writing-mode [3]dir[4]direction[5]unicode-bidi 前面的話 一般地,正常網頁文本方向都是從上到下,從左到右。實際上,有多種設置文本方向的屬性,前面已經詳細介紹過text-align,HTML全局屬性中有一個"di ...
  • Sass Maps 的函數-map-remove($map,$key),keywords($args) map-remove($map,$key) map-remove($map,$key)函數是用來刪除當前$map中的某一個$key,從而得到一個新的 map,其返回的值是一個map.他並不能直接從 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...