vue-learning:1 - 為什麼選擇vue

来源:https://www.cnblogs.com/webxu20180730/archive/2019/05/19/10890219.html
-Advertisement-
Play Games

為什麼選擇Vue 通過一個對比,展示 框架的優勢: 需求:根據請求後端介面返回的數據列表,渲染在頁面中。 傳統上我們使用 的`Ajax http`請求,獲取數據。判斷列表數據是否存在,如果不存在,顯示一條提示信息;如果存在,則顯示出來。 "DEMO 1 1 jQuery create list" j ...


為什麼選擇Vue

通過一個對比,展示vue框架的優勢:

需求:根據請求後端介面返回的數據列表,渲染在頁面中。

傳統上我們使用jQueryAjax發送http請求,獲取數據。判斷列表數據是否存在,如果不存在,顯示一條提示信息;如果存在,則顯示出來。

    <ul class="js-data"></ul>
    <script>
        $(document).ready(function () {
            $.get("https://example.com/api/data")
                .then( function (res) {
                    var $ul = $(".js-data")

                    if (!res.data.length) {
                        var $noItem = $("<li>")
                        $noLi.text("sorry, there are no data")
                        $ul.append($noItem)
                    } else {
                        res.data.forEach( function (item) {
                            var $li = $("<li>").text(item)
                            $ul.append($li)
                        })
                    }
                })
        })
    </script>

DEMO 1-1 jQuery create list

jQuery 這段代碼執行了以下邏輯:
    1. 使用$.get()發起Ajax,獲得數據列表;
    2. 獲得要掛載列表的ul元素;
    3. 如果請求響應的結果中沒有數據,則創建一個li元素,顯示一段提示文本;
    4. 如果有數據,則遍歷每一個數據項目,將數據內容添加至li元素中;
    5. 並將li元素掛載到ul元素上。

在這個例子js中,我們不僅要處理數據(請求數據,並判斷響應的數據是否存在),還要處理視圖中的DOM元素(創建li元素,並掛載到ul元素中)。

下麵我們用VUE框架來處理上面的需求

    <ul class="js-items">
        <li v-if="!items.length">sorry, thert are no data</li>
        <template v-else>
            <li v-for="item in items">{{ item }} </li>
        </template>
    </ul>
    <script>
        new Vue({
            el: ".js-items",
            data: {
                items: []
            },
            created() {
                fetch("https://example.com/api/data")
                    .then(res = > {
                        this.items = res.data.items
                    })
            }
        })
    </script>

DEMO 1-1 Vue create list

VUE 這段代碼執行了以下邏輯:
    1. 使用fetch()發起了一個Ajax請求;(當然也可以用其它請求API,如axios)
    2. 將返回數據賦值給data對象中的items屬性

在VUE這個例子中,我們只需要按VUE的語法寫好HTML部分,然後在script中請求數據,並完成賦值,視圖會自動更新,與上面jQuery呈現的頁面完全一樣。

在VUE這裡,視圖HTML部分和邏輯JS部分完全分開,只專註於各自的業務,我們不用在js中操作DOM,VUE框架的內部會自動幫我們處理。這就是MVVM模式,View(視圖) 和 Model(數據) 分離,由框架核心ViewModel控制兩者關聯。

Vue的MVVM模型

關於MVC / MVP / MVVM 理解可以查看阮一峰的blog

在web應用中,最底層最基礎的結構是HTML / CSS / Javascript。分別處理頁面的結構、樣式、行為。

換個角度看,我們也可以把頁面劃分為視圖層和邏輯層。視圖層由HTML/CSS處理,邏輯層由JS處理。

按這樣劃分,我們學習的方向就是VUE框架是如何控制視圖層顯示,以及如何與邏輯層交互的。

VUE將視圖層HTML抽象為一個模板template,作為VUE實例的template屬性的值,模板中HTML元素通過指令directive來建立視圖層view和viewModel的聯繫。
VUE向視圖層view提供API叫做指令
VUE向邏輯層model提供的API包括data/methods/computed/watch/filter/component等等。

DEMO 1-1 view / mode

vue在template中實現視圖邏輯,在js中實現業務邏輯

上面的例子,我們也可以改為下麵的寫法,以便更好理解:

    <div id="app"></div>
    <script>
        new Vue({
            // 視圖層view
            template: `<ul class="js-items">
                        <li v-if="!items.length">sorry, thert are no data</li>
                        <template v-else>
                            <li v-for="item in items">{{ item }} </li>
                        </template>
                    </ul>`,

            // 邏輯層model
            el: "#app",
            data: {
                items: []
            },
            created() {
                fetch("https://example.com/api/data")
                    .then(res = > {
                        this.items = res.data.items
                    })
            }
        })
    </script>

Vue: The Progressive Framework

vue 是一個漸近式框架

參考《深入淺出Vue.js》第一章 p3

vue 的主要歷史

  • 2013年7月28日 尤雨溪在GitHub上提交第一個commit。此時還不叫vue,叫Element,後又更名為Seed.js
  • 2013年12月7日 發佈v 0.6.0版,正式更名為Vue.js,並且把指令系統寫法改為v-。這一版本代表vue正式問世
  • 2015年10月26日 正式發佈v 1.0.0
  • 2016年10月1日 國慶 發佈v 2.0.0

vue定位變化

在最早期的vue只專註於視圖層,沒有路由,沒有狀態管理,也沒有官方構建工具,只是一個庫,相當一個新的視圖模板庫。

後來,為了適應不同應用場景,慢慢加入了一些官方輔助工具,如路由Router、狀態管理Vuex等。
但是在這個演變發展過程中,vue始終維持一個理念:”這個框架應該是漸近式
也就是vue的目前的定位:The Progressive Framework

vue 漸近式框架的理解

所謂漸近式框架,就是把框架分層。
最核心的部分是視圖渲染,然後往外是組件機制,在此基礎上加入路由機制,加入狀態管理,添加單元測試,使用構建工具等。除了核心部分,其它部分都可以根據項目應用的需求添加,不是必需的。

用一張圖理解漸近式的概念
vue 漸近式框架的理解

本節是 vue-learning系列 的開篇,對核心部分的基礎內容,學習總結已經完成併發布,點擊下方鏈接可直達內容目錄。

vue-learning系列:核心部分學習總結

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

-Advertisement-
Play Games
更多相關文章
  • 1.什麼是JQuery。 JavaScript開發的過程中,處理瀏覽器的相容很複雜而且很耗時,於是一些封裝了這些操作的庫應運而生。這些庫還會把一些常用的代碼進行封裝。 把一些常用到的方法寫到一個單獨的js文件,使用的時候直接去引用這js文件就可以了。(animate.js、common.js) 常見 ...
  • bootstrap中的導航條 一、和導航的區別 1. 導航條比導航多了一個條字 2. 直接上圖 導航: 導航條: 簡單文字描述: 由兩張圖看出,導航內容比較簡單,而導航條可以包含導航及其他元素,如表單,搜索框等,並且通常導航條會有一個區別於頁面的背景色。 二、在頁面中定義導航條 方法: 為父容器添加 ...
  • 前端之CSS2,內容包括 CSS盒子模型, 塊元素-內聯元素-內聯塊元素 ,浮動,定位,background屬性。其中,CSS盒子模型 包括 CSS盒子模型介紹,設置邊框,設置內間距padding,設置外間距margin,margin相關技巧,外邊距合併問題,margin-top 塌陷問題,元素溢出... ...
  • 1.計算屬性 我們可以將同一函數定義為一個方法而不是一個計算屬性。兩種方式的最終結果確實是完全相同的。然而,不同的是計算屬性是基於它們的依賴進行緩存的。只在相關依賴發生改變時它們才會重新求值;多次調用,計算屬性會立即返回之前的計算結果,而不必再次執行函數。 2.使用偵聽器 我們發現,與計算屬性相比, ...
  • 本章使用路徑生成器來繪製一個折線圖。以中國和日本的GDP數據為例: 1 //數據 2 var dataList = [ 3 { 4 coountry : "china", 5 gdp : [ 6 [2000,11920],[2001,13170],[2002,14550],[2003,16500], ...
  • Object Array instanceof Function 引用類型 - Object {} 等價於 new Object() 我們經常使⽤用對象來承載可選參數,⽽而⽤用 命名的形式參數來傳遞必要的參數 a.c 等價於 a[‘c’] 我們經常使⽤用對象來承載可選參數,⽽而⽤用 命名的形式參數來 ...
  • 作為一個真正的前端工作者適配是一個老生常談的問題,那麼今天給大家總結一下在工作當中常用做適配的方式。 一、固定佈局(pc端)(靜態佈局) 以像素作為頁面的基本單位,不管設備和瀏覽器寬度,只設計一套尺寸 二、根據不同根據不同的解析度,載入不同的CSS樣式文件(可切換的固定佈局)自適應佈局 1、<scr ...
  • 簡歷第三天 簡歷的CSS文件 簡歷的html 今天效果圖 今天學習到的內容 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...