前端框架對比之vue與regular(一)

来源:http://www.cnblogs.com/aiiright/archive/2017/05/05/6813855.html
-Advertisement-
Play Games

每次一寫到Regular總是忍不住先介紹一下,Regualr是網易杭州研究所的一位叫鄭海波的大神寫的一款前端框架,目前 這款框架推廣的不深,加上其和angular過於相似的框架名,導致接受力並不大,其實Regular這款框架在我 看來已經很完善了。在網易呆了一段時間,寫的幾個項目都是用的Regu... ...


 

每次一寫到Regular總是忍不住先介紹一下,Regualr是網易杭州研究所的一位叫鄭海波的大神寫的一款前端框架,目前 
這款框架推廣的不深,加上其和angular過於相似的框架名,導致接受力並不大,其實Regular這款框架在我 
看來已經很完善了。在網易呆了一段時間,寫的幾個項目都是用的Regualr,在之前我主要是用vue比較多, 
所以開發過程中總忍不住將這兩個框架進行對比。本文主要對實際開發代碼進行對比,我個人是認為各有千秋,具體的請大家自行判斷。

 一.插值

    1)文本插值:
        regular和vue的插值方法並沒有什麼區別
        vue: 不過vue預設以{{Expression}}的形式展現
        regular:而regular則以{Expression}的形式展現,目前可以用下麵的方法更改開閉符號

Regular.config({
  'BEGIN': '{{',
  'END': '}}'
})

    2)屬性插值:

       vue:應用v-bind指令,如下把id這個屬性用v-bind:的形式綁定到div上,屬性值動態從data中獲取

<div v-bind:id="dynamicId"></div>

      regular:與文本插值一樣的寫法,{}里代表從data中動態獲取的數據

<div id="{dynamicId}"></div>

    3)插入表達式

        vue:

<div v-bind:id=" 'list-' +id"></div>

        regular:

<div id="list-{id}"></div>

效果都是給div一個以list-開始的id

      vue:

<div>{{ message.split('').reverse().join('') }}</div>

      regular:

<div>{ message.split('').reverse().join('') }</div>

二:指令

regular:以r-為首碼的特殊屬性,regular中最常使用的是r-hide以及r-show

vue:以v-為首碼的特殊屬性,vue對指令的使用要頻繁的多,基本上處處指令,如v-if/v-bind/v-on,v-if用來判斷是否渲染,v-bind用來響應的更新html屬性,v-on則用來監聽事件

下麵會對一些指令的用法進行詳細的解釋

三:關於條件渲染

regular:用{#if 判斷語句}{#elseif 判斷語句} {#else } {/if}的形式進行條件渲染

 {#if load == 1}
       <div>上拉載入更多</div>
    {#elseif load == 2}
       <div class="loading">正在載入</div>
    {#elseif load == 3}   
       <div>以上為所有內容</div>
    {/if}

其中load是在data中定義的

vue:用<div v-if="判斷語句"></div><div v-elseif="判斷語句"></div><div v-else="判斷語句"></div>的形式進行條件渲染

<div v-if="load ==='1' ">
         上拉載入更多
</div>
<div v-else-if="load ==='2">
          正在載入
</div>
<div v-else>
以上為所有內容
</div>

其中load為data中定義的。

四:關於列表渲染

regular:regular中用{#list 列表 as }{/list}的形式進行渲染

{#list attendanceList as att}
         <div class="wrap">
            <div class="item">
                <p class="time">{att.dataTime}</p>
                 <p class="address">
                    <span class="u-icon u-icon-loc"></span>
                    {att.location}
                 </p>
              </div>
           </div>
{/list}

vue:vue中用<div v-for="變數 in 列表"></div>的形式渲染

<ol>
   <li v-for="todo in todos">
          {{todo.text}}
    </li>
</ol>

五:v-if/v-show和{#if}/r-show的區別

v-if和{#if} 是“真正的”條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建。

同時他們 也是惰性的:如果在初始渲染時條件為假,則什麼也不做——直到條件第一次變為真時,才會開始渲染條件塊。

相比之下, v-show 和 r-show就簡單得多——不管初始條件是什麼,元素總是會被渲染,並且只是簡單地基於 CSS 進行切換。

一般來說, v-if/{#if} 有更高的切換開銷,而 v-show/r-show 有更高的初始渲染開銷。因此,如果需要非常頻繁地切換,則使用 v-show/r-show 較好;如果在運行時條件不太可能改變,則使用 v-if /{/if}較好。

六:對比兩者js文件區別

vue:

          var app4 = new Vue({
                el:'#app4',
data:{
message:'Hello',
number:[1,2,3,4,5]
},
computed:{
reversedMessage:function(){
return this.message.split('').reserve()
}
},
methods:{
even:function(number){
return number.filter(function(number){
return number%2 === 0
})
}
}
            });
            app4.todos.push({text:"444"})

在此例中可以看出進行操作的是#app4模版,data里為#app模塊需要用到的數據,method為模塊用到的方法,computed為計算屬性,調用時可直接用{{reversedMessage}}調用。

regular:

      data: {
            currentDate: ''
            
        },
        init: function() {
             this.data.currentDate = 1;
             this.setdata();
        },
        setdata: function(){
            this.data.currentDate = 2;
             alert(  this.data.currentDate);
         }

簡單的regular應用主要由上面幾個部分解決,data中寫全局的數據,init是初始化執行的函數,可以把頁面初始化就要更改的數據,方法在此函數中更改和引用。setdata:function為自定義函數。

本文就說這些了,下一篇我會從組件,ajax交互,及性能優化方面繼續和大家探討這兩款看似相似又有很大不同的前端框架。本文純屬個人經驗,如有不對的地方,歡迎指正。

 

---恢復內容結束---

每次一寫到Regular總是忍不住先介紹一下,Regualr是網易杭州研究所的一位叫鄭海波的大神寫的一款前端框架,目前 
這款框架推廣的不深,加上其和angular過於相似的框架名,導致接受力並不大,其實Regular這款框架在我 
看來已經很完善了。在網易呆了一段時間,寫的幾個項目都是用的Regualr,在之前我主要是用vue比較多, 
所以開發過程中總忍不住將這兩個框架進行對比。本文主要對實際開發代碼進行對比,我個人是認為各有千秋,具體的請大家自行判斷。

 一.插值

    1)文本插值:
        regular和vue的插值方法並沒有什麼區別
        vue: 不過vue預設以{{Expression}}的形式展現
        regular:而regular則以{Expression}的形式展現,目前可以用下麵的方法更改開閉符號

Regular.config({
  'BEGIN': '{{',
  'END': '}}'
})

    2)屬性插值:

       vue:應用v-bind指令,如下把id這個屬性用v-bind:的形式綁定到div上,屬性值動態從data中獲取

<div v-bind:id="dynamicId"></div>

      regular:與文本插值一樣的寫法,{}里代表從data中動態獲取的數據

<div id="{dynamicId}"></div>

    3)插入表達式

        vue:

<div v-bind:id=" 'list-' +id"></div>

        regular:

<div id="list-{id}"></div>

效果都是給div一個以list-開始的id

      vue:

<div>{{ message.split('').reverse().join('') }}</div>

      regular:

<div>{ message.split('').reverse().join('') }</div>

二:指令

regular:以r-為首碼的特殊屬性,regular中最常使用的是r-hide以及r-show

vue:以v-為首碼的特殊屬性,vue對指令的使用要頻繁的多,基本上處處指令,如v-if/v-bind/v-on,v-if用來判斷是否渲染,v-bind用來響應的更新html屬性,v-on則用來監聽事件

下麵會對一些指令的用法進行詳細的解釋

三:關於條件渲染

regular:用{#if 判斷語句}{#elseif 判斷語句} {#else } {/if}的形式進行條件渲染

 {#if load == 1}
       <div>上拉載入更多</div>
    {#elseif load == 2}
       <div class="loading">正在載入</div>
    {#elseif load == 3}   
       <div>以上為所有內容</div>
    {/if}

其中load是在data中定義的

vue:用<div v-if="判斷語句"></div><div v-elseif="判斷語句"></div><div v-else="判斷語句"></div>的形式進行條件渲染

<div v-if="load ==='1' ">
         上拉載入更多
</div>
<div v-else-if="load ==='2">
          正在載入
</div>
<div v-else>
以上為所有內容
</div>

其中load為data中定義的。

四:關於列表渲染

regular:regular中用{#list 列表 as }{/list}的形式進行渲染

{#list attendanceList as att}
         <div class="wrap">
            <div class="item">
                <p class="time">{att.dataTime}</p>
                 <p class="address">
                    <span class="u-icon u-icon-loc"></span>
                    {att.location}
                 </p>
              </div>
           </div>
{/list}

vue:vue中用<div v-for="變數 in 列表"></div>的形式渲染

<ol>
   <li v-for="todo in todos">
          {{todo.text}}
    </li>
</ol>

五:v-if/v-show和{#if}/r-show的區別

v-if和{#if} 是“真正的”條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建。

同時他們 也是惰性的:如果在初始渲染時條件為假,則什麼也不做——直到條件第一次變為真時,才會開始渲染條件塊。

相比之下, v-show 和 r-show就簡單得多——不管初始條件是什麼,元素總是會被渲染,並且只是簡單地基於 CSS 進行切換。

一般來說, v-if/{#if} 有更高的切換開銷,而 v-show/r-show 有更高的初始渲染開銷。因此,如果需要非常頻繁地切換,則使用 v-show/r-show 較好;如果在運行時條件不太可能改變,則使用 v-if /{/if}較好。

六:對比兩者js文件區別

vue:

          var app4 = new Vue({
                el:'#app4',
data:{
message:'Hello',
number:[1,2,3,4,5]
},
computed:{
reversedMessage:function(){
return this.message.split('').reserve()
}
},
methods:{
even:function(number){
return number.filter(function(number){
return number%2 === 0
})
}
}
            });
            app4.todos.push({text:"444"})

在此例中可以看出進行操作的是#app4模版,data里為#app模塊需要用到的數據,method為模塊用到的方法,computed為計算屬性,調用時可直接用{{reversedMessage}}調用。

regular:

      data: {
            currentDate: ''
            
        },
        init: function() {
             this.data.currentDate = 1;
             this.setdata();
        },
        setdata: function(){
            this.data.currentDate = 2;
             alert(  this.data.currentDate);
         }

簡單的regular應用主要由上面幾個部分解決,data中寫全局的數據,init是初始化執行的函數,可以把頁面初始化就要更改的數據,方法在此函數中更改和引用。setdata:function為自定義函數。

本文就說這些了,下一篇我會從組件,ajax交互,及性能優化方面繼續和大家探討這兩款看似相似又有很大不同的前端框架。本文純屬個人經驗,如有不對的地方,歡迎指正。

 


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

-Advertisement-
Play Games
更多相關文章
  • JavaScript 通過Document 類型表示文檔。在瀏覽器中,document 對象是HTMLDocument(繼承自Document 類型)的一個實例,表示整個HTML 頁面。而且,document 對象是window 對象的一個屬性,因此可以將其作為全局對象來訪問。Document 節點 ...
  • 1、Package Contorl 包安裝 Package Contorl:由Sublime Text提供的絕對必要的包管理器。 1.按Ctrl+`打開console。 2.粘貼一下代碼到底部命令行並回車 import urllib.request,os,hashlib; h = '7183a2d3 ...
  • 上一篇說到,因為有新朋友加入,對前端開發有了新的要求。原來基於 Bootstrap 的 UI 就不要了。在網上(其實是 GitHub 上)逛了幾圈,最後使用了 "antd admin" 這個框架做為基礎模板,然後根據悟空 CRM 的特色進行了一些改變: 在原來的 antd admin 的頁面里,應該 ...
  • AngualrJs2官方方法是以@Input,@Output來實現組件間的相互傳值,而且組件之間必須父子關係,下麵給大家提供一個簡單的方法,實現組件間的傳值,不僅僅是父子組件,跨模塊的組件也可以實現傳值 思路:定義一個服務作為傳遞參數的媒介註入在要傳參的組件的構造器裡面,然後對服務裡面屬性(傳參媒介 ...
  • 3.parseInt(string, radix) 可以把二進位、八進位、十六進位或其他任何進位的字元串轉換成整數,預設轉化為十進位。 歸納說明 1)、Math.floor對正數的小數取“舍”,對負數的小數取“入”; 2)、praseInt屬於類型轉換,會對字元逐級判斷,占用記憶體較高; 3)、兩者的 ...
  • ionic前端框架為前端開發添磚加瓦,提高的前端開發效率,但也存在著各種坑。下麵舉一例: <ion-infinite-scroll ng-if="moreDataCanBeLoaded()" icon="ion-loading-c" on-infinite="loadMoreData()" dist ...
  • 1)遞歸 2)非遞歸 ...
  • 1 for...of 字元串的遍歷介面 for(let i of "abc"){ console.log(i); } // a // b // c 2 includes 是否包含某字元串,返回布爾值 格式:str.includes(searchString[, position]) 與indexOf ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...