Vue.js 學習示例

来源:http://www.cnblogs.com/wangrudong003/archive/2017/01/10/6270567.html
-Advertisement-
Play Games

本篇和大家分享的是學習Vuejs的總結和調用webapi的一個小示例;快到年底了爭取和大家多分享點東西,希望能對各位有所幫助;本章內容希望大家喜歡,也希望各位多多掃碼支持和推薦謝謝: » Vuejs - 學習大雜燴 » WebApi + Vue.js 示例 下麵一步一個腳印的來分享: » Vuejs ...


本篇和大家分享的是學習Vuejs的總結和調用webapi的一個小示例;快到年底了爭取和大家多分享點東西,希望能對各位有所幫助;本章內容希望大家喜歡,也希望各位多多掃碼支持和推薦謝謝:

 

» Vuejs - 學習大雜燴

» WebApi + Vue.js 示例

 

下麵一步一個腳印的來分享:

» Vuejs - 學習大雜燴

首先,咋們要學習一個js框架,那麼肯定要引入該框架的基礎庫,這裡我創建一個頁面並且引用官網的庫是: <script src="https://unpkg.com/vue/dist/vue.js"></script> ,下麵我們來看一段Vue的基礎使用代碼:

1 var app = new Vue({
2 
3         el: "#appVue",
4         data: {
5             msg: "第一個vue",
6         }
7     });

分析下代碼,這個Vue需要的參數傳遞是一個{}對象;裡面的el和data是參數名稱;el對應的是咋們的頁面上某個塊元素的id(比如div,table的id屬性);data對應的是數據源;msg是咋們自定義的數據源名稱;好了咋們再來看一下對應的html代碼和效果圖:

1 <h3>Vue - 學習大雜燴</h3>
2 <hr />
3 <div class="container" id="appVue">
4     <input type="text" v-model="msg" class="form-control" />
5 </div>

效果圖:

很明顯我們初始化的數據msg(“第一個vue”)在input中體現出來了,細看一下這個input標簽的屬性多了一個v-model屬性,並且她對應的值是咋們初始化定義的msg,由此可見v-model起到了數據綁定作用;好咋們再來吧數據值弄複雜點,在data中再增加一個json格式的數組如:

1 blogs: [
2            { title: "webapi" },
3            { title: "wcf" },
4            { title: "mvc" }
5         ]

然後咋們增加如下的html:

1 <ul>
2   <li class="text-left "  v-for="(blog,index) in blogs">{{index}} - {{blog.title}}</li>
3 </ul>

直接刷新頁面,看下效果圖:

從結果能夠看出咋們定義的數據,直接被遍歷展示在了頁面,再來分析下具體的代碼,相比較普通的li元素,此時多了一個v-for屬性,並且對一個的值有一個這樣的語法規則 (obj,index) in arr ,就類似於for迴圈的寫法並且還有一個遍歷編號index,有了迴圈那肯定需要把值展示出來,這個時候可以看到li元素子級裡面的寫法是 {{index}} - {{blog.title}} ,來分析下寫法規則:

1. {{}}是輸出文本的格式,其中包含了要輸出的對象

2. 參數index對應就是v-for裡面的index,對應的值是遍歷的序號,從0開始

3. blog.title對應的是v-for裡面的blog,和她對應的自定義屬性title

由上面{{}}數據綁定寫法,不得不引出我們對她的好奇心,這種寫法其實在很多js數據綁定框架中都相同(比如:angularjs),下麵我們來做一個相加的小例子來更深刻記住這種寫法,首先在剛纔的data屬性中增加兩個屬性x和y:

 1 data: {
 2             msg: "第一個vue",
 3             blogs: [
 4                 { title: "webapi" },
 5                 { title: "wcf" },
 6                  { title: "mvc" }
 7             ],
 8             x: 444,
 9             y: 2
10         },

然後增加如下html代碼:

1  <input type="text" v-model="x" /> * <input type="text" v-model="y" /> = {{x *  y}}

屬性頁面執行下效果:

由此能夠看出 {{x * y}} 允許表達式,並且當我文本框中的x或y值修改後,此{{x*y}}會自動重新計算,有點類似於我們自己寫的js計算後重新賦值到顯示框中的概念;下麵我們來看vue中怎麼定義一個方法,這裡用到她的一個屬性methods,我們定義如下的代碼:

 1 var app = new Vue({
 2 
 3         el: "#appVue",
 4         data: {
 5             msg: "第一個vue",
 6             blogs: [
 7                 { title: "webapi" },
 8                 { title: "wcf" },
 9                  { title: "mvc" }
10             ],
11             x: 444,
12             y: 2
13         },
14         methods: {
15             showMsg: function () {17                 this.msg = "我是" + this.msg;
18             }
19         }
}

再來增加如下的html元素, <button v-on:click="showMsg" class="btn">點擊</button> ,好了再來看下運行的效果圖並且多次點擊按鈕:

得到的效果是,一直在咋們 v-model="msg" 文本框中增加“我是”,這裡得到的結論是按鈕出發了我們定義在vue中methods中的方法showMsg,再來看下按鈕上的這個屬性 v-on:click 就是用來表示綁定點擊事件的,這裡的v-on:click可以縮寫成@click,由於我在vs中的mvc試圖模板不支持這種寫法,所以本篇還是使用v-on這種寫法來綁定事件;我們再來用一用她的過濾器,這裡咋們還是在vue中增加如下filters的代碼,定義一個大小寫的過濾器:

1 filters: {
2             toUpper: function (val, isUpper) {
3                 if (!val) { return ""; }
4 
5                 return isUpper ? val.toUpperCase() : val.toLowerCase();
6             }
7         }

為了方便看效果,我們修改上面的v-model="msg"的文本框代碼如下:

1 <input type="text" v-model="msg" class="form-control" />{{msg|toUpper(true)}}<br />{{msg|toUpper(false)}}

我們在文本框中增加了一個 {{msg|toUpper(true)}} 寫法,細心朋友能發下後面的toUpper就是我們剛纔定義的過濾器的方法,傳遞了一個參數true,然後看下效果圖:

通過使用不同參數的filter的對比,能看出我們過濾器在此實例中的效果,這裡註意的是在msg後面直接使用‘|’隔開就可以增加我們定義的過濾器了,如果多個以此類推使用‘|’追加隔開就行了,還有就是我們定義的 toUpper: function (val, isUpper) 方法中有兩個參數,第一個參數就是綁定的msg本身,第二個參數才是我們需要手動傳遞的,這個一定要分開;時間不多了,這裡就不再講解其他的常用的特性和屬性了,直接來看下麵vue使用webapi的數據體現的一個例子;

 

» WebApi + Vue.js 示例

首先,這裡用到了Vue提供的組件概念component,她和js變數一樣有全局和局部(私有)兩種,代碼方面差距不是很大效果也一樣,這裡我們用到的是局部方式來定義一個組件,下麵先來看整體代碼:

 1  var blogApp = new Vue({
 2         el: "#divBlogs",
 3         data: {
 4             blogs: []
 5         },
 6         methods: {
 7             getBlogs: function () {
 8 
 9                 var that = this;
10                 $.getJSON("http://www.lovexins.com:1001/api/values?task=2", function (result) {
11                     if (!result) { return; }
12                     that.blogs = result;
13                 });
14             }
15         },
16         components: {
17             "div-blog": {
18                 props: ["item"],
19                 template: '<div class=" bs-callout bs-callout-danger">' +
20                                '    <h4>' +
21                                '        <a v-bind:href="item.Url" target="_blank">{{item.Title | toUpperOrLower(false)}}</a>' +
22                                '    </h4>' +
23                                '    <p>' +
24                                '        {{item.Des}}' +
25                                '    </p>' +
26                                '    <hr />' +
27                                '    <h5>' +
28                                '        作者:<a v-bind:href="item.BlogUrl" target="_blank">{{item.NickName}}</a>  發佈時間:<code>{{item.CreateTime}}</code>  推薦:<code>{{item.ZanNum}}</code>  閱讀:<code>{{item.ReadNum}}</code>  評論:<code>{{item.CommiteNum}}</code>' +
29                                '    </h5>' +
30                                ' </div>',
31                 filters: {
32                     toUpperOrLower: function (val, isUpper) {
33                         if (!val) { return ""; }
34 
35                         return isUpper ? val.toUpperCase() : val.toLowerCase();
36                     }
37                 }
38             }
39         }
40     });

這裡定義的格式和上面第一小節使用到的差不多,只是多了一個components的定義,這個就是組件的關鍵字,咋們來逐一分析下代碼步驟;

1. blogs: []是我們定義的一個博客信息數組

2. methods屬性中getBlogs方法用到了一段 var that = this; 這樣的代碼,這裡的this是上面創建的 var blogApp = new Vue() 對象,她可以直接使用data中定義的博客數據數組blogs,因此有了下麵通過jquery的getJSON獲取webapi數據後,直接賦值給博客數組bolgs

3. components組件中自定義了一個名為“div-blog”的組件,參數名稱是props定義的item;template是對應的模板,裡面可以直接使用item來獲取對應的參數值;

4. 這裡也定義了一個filters,同樣是轉大小寫的,寫法可以忽略了,主要註意的地方這裡局部的定義的主鍵裡面使用filters的時候也同樣是 {{item.Title | toUpperOrLower(false)}} 格式

好了通過上面總結註意點,咋們再來看下怎麼在html中使用這個自定義的組件呢,如下整體html代碼:

 1 <div class="row" id="divBlogs">
 2     <div class="col-md-12">
 3         <button v-on:click="getBlogs" class="btn btn-default">查 詢</button>
 4         <div-blog v-for="blog in blogs" v-bind:item="blog"></div-blog>
 5 
 6         <div style="position:fixed; right:0px; bottom:10px; width:44px; height:40px; background-color:#F8F8F8; font-weight:100; cursor:pointer;" id="toTop" onclick="toTop()">
 7             <img title="返 回" style="width:38px;height:38px;border:1px solid #ccc" src="http://121.42.208.152/images/top.png">
 8         </div>
 9     </div>
10 </div>

引用自定義組件的代碼就一句: <div-blog v-for="blog in blogs" v-bind:item="blog"></div-blog> ,這裡的div-blog就是對應上面總結的第3點說的,自定義主鍵名稱,需要註意的是如果自定義組件名稱格式如divBlog(駝峰格式),那麼我們在html中使用格式就必須是div-Blog,通過‘-’分割開來,這個細節特別要註意不然頁面不會有效果,好了說了這麼多來看下運行的效果圖:

這裡我用的是上一篇博客開放出來抓取博客園首頁數據的介面:http://www.lovexins.com:1001/api/values?task=2,後臺設置了允許跨域請求,如果各位有興趣可以直接使用該數據,順便再發下本次實例的線上地址:http://www.lovexins.com:1001/home/vue,希望各位喜歡,同樣希望各位多多點“推薦


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

-Advertisement-
Play Games
更多相關文章
  • AggregateRoot和Entity的區別 AggregateRoot繼承於Entity,並實現了IGeneratesDomainEvents介面 public class AggregateRoot : Entity, IAggregateRoot, IEntity, IGeneratesDo ...
  • 對於想學習正則表達式的童鞋,一些基礎的語法啥的,可以參考 http://www.cnblogs.com/China3S/archive/2013/11/30/3451971.html 下邊是一些我們常用的正則表達式。自己寫的一些正則表達式,可以先線上測評一下。 一、校驗數字的表達式 1 數字:^[0 ...
  • 構造器名與類名一致。 1。實例構造器與類(引用類型) 構造器是允許將類型的實力初始化為良好狀態的一種特殊方法。 創建一個引用類型的實例時(類),首先為實例的數據欄位分配記憶體,然後初始化對象的附加欄位(類型對象指針和同步索引快),最後調用類型的實例構造器來設置對象的初始狀態。 new一個類所發生的事: ...
  • 在點擊運行項目時,生成成功。但是頁面沒有彈出來,彈出個提示框,無法連接到 ASP.NET Development Server. 網上我看到說關閉掉防火牆,可是再關掉防火牆後還是不行。但是其他的項目又能跑起來,所以估計是埠號被占用了。 最後的解決方案是: 項目右鍵屬性,在屬性視窗,將使用動態埠號 ...
  • 我個人比較懶,能自動做的事絕不手動做,最近在用ASP.NET Core寫一個項目,過程中會積累一些方便的工具類或框架,分享出來歡迎大家點評。 如果以後有時間的話,我打算寫一個系列的【實現BUG自動檢測】,本文將是第一篇。 如果你使用過ASP.NET Core那麼對依賴註入一定不陌生。 使用流程... ...
  • 在C#.NET的開發中,事件是經常接觸到的概念,比如為按鈕添加點擊事件,並寫入點擊按鈕觸發事件要運行的代碼。不管是ASP.NET還是WinForm等各種形式的應用程式,最經常是為系統生成的事件寫具體代碼。如果要自定義事件呢?有的朋友對於自定義事件感覺比較難理解。最近在開發HoverTreeTop項目 ...
  • C#簡單程式練習 說明:學習之餘溫習幾道經典基礎知識題,將其記錄下來,以供初學者參考。 1,題目:求出0-1000中能被7整除的數,並計算輸出每五個數的和: 運行截圖: 題目2:編寫一個類,其中包含一個排序的方法 Sort(), 當傳入的是一串整數,就按照從小到大的順序輸出,如果傳入的是一個字元串, ...
  • 堆、棧、引用類型、值類型 記憶體分為堆和棧(PS:還有一種是靜態存儲區域 [記憶體分為這三種]),值類型的數據存儲在棧中,引用類型的數據存儲在堆中。 堆、棧: 堆和棧的區別: 棧是編譯期間就分配好的記憶體空間,因此你的代碼中必須就棧的大小有明確的定義;局部值類型變數、值類型參數等都在棧記憶體中。 堆是程式運 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...