Vue.js學(xué)習(xí)示例分享
本篇和大家分享的是學(xué)習(xí)Vuejs的總結(jié)和調(diào)用webapi的一個(gè)小示例;
» Vuejs - 學(xué)習(xí)大雜燴
» WebApi + Vue.js 示例
下面一步一個(gè)腳印的來分享:
» Vuejs - 學(xué)習(xí)大雜燴
首先,咋們要學(xué)習(xí)一個(gè)js框架,那么肯定要引入該框架的基礎(chǔ)庫,這里我創(chuàng)建一個(gè)頁面并且引用官網(wǎng)的庫是:
<script src=">
下面我們來看一段Vue的基礎(chǔ)使用代碼:
var app = new Vue({
el: "#appVue",
data: {
msg: "第一個(gè)vue",
}
});
分析下代碼,這個(gè)Vue需要的參數(shù)傳遞是一個(gè){}對(duì)象;里面的el和data是參數(shù)名稱;el對(duì)應(yīng)的是咋們的頁面上某個(gè)塊元素的id(比如div,table的id屬性);data對(duì)應(yīng)的是數(shù)據(jù)源;msg是咋們自定義的數(shù)據(jù)源名稱;好了咋們?cè)賮砜匆幌聦?duì)應(yīng)的html代碼和效果圖:
<h3>Vue - 學(xué)習(xí)大雜燴</h3> <hr /> <div class="container" id="appVue"> <input type="text" v-model="msg" class="form-control" /> </div>
效果圖:

很明顯我們初始化的數(shù)據(jù)msg(“第一個(gè)vue”)在input中體現(xiàn)出來了,細(xì)看一下這個(gè)input標(biāo)簽的屬性多了一個(gè)v-model屬性,并且她對(duì)應(yīng)的值是咋們初始化定義的msg,由此可見v-model起到了數(shù)據(jù)綁定作用;好咋們?cè)賮戆蓴?shù)據(jù)值弄復(fù)雜點(diǎn),在data中再增加一個(gè)json格式的數(shù)組如:
blogs: [
{ title: "webapi" },
{ title: "wcf" },
{ title: "mvc" }
]
然后咋們?cè)黾尤缦碌膆tml:
<ul>
<li class="text-left " v-for="(blog,index) in blogs">{{index}} - {{blog.title}}</li>
</ul>
直接刷新頁面,看下效果圖:

從結(jié)果能夠看出咋們定義的數(shù)據(jù),直接被遍歷展示在了頁面,再來分析下具體的代碼,相比較普通的li元素,此時(shí)多了一個(gè)v-for屬性,并且對(duì)一個(gè)的值有一個(gè)這樣的語法規(guī)則 (obj,index) in arr ,就類似于for循環(huán)的寫法并且還有一個(gè)遍歷編號(hào)index,有了循環(huán)那肯定需要把值展示出來,這個(gè)時(shí)候可以看到li元素子級(jí)里面的寫法是 {{index}} - {{blog.title}} ,來分析下寫法規(guī)則:
1. {{}}是輸出文本的格式,其中包含了要輸出的對(duì)象
2. 參數(shù)index對(duì)應(yīng)就是v-for里面的index,對(duì)應(yīng)的值是遍歷的序號(hào),從0開始
3. blog.title對(duì)應(yīng)的是v-for里面的blog,和她對(duì)應(yīng)的自定義屬性title
由上面{{}}數(shù)據(jù)綁定寫法,不得不引出我們對(duì)她的好奇心,這種寫法其實(shí)在很多js數(shù)據(jù)綁定框架中都相同(比如:angularjs),下面我們來做一個(gè)相加的小例子來更深刻記住這種寫法,首先在剛才的data屬性中增加兩個(gè)屬性x和y:
data: {
msg: "第一個(gè)vue",
blogs: [
{ title: "webapi" },
{ title: "wcf" },
{ title: "mvc" }
],
x: 444,
y: 2
},
然后增加如下html代碼:
<input type="text" v-model="x" /> * <input type="text" v-model="y" /> = {{x * y}}
屬性頁面執(zhí)行下效果:

由此能夠看出 {{x * y}} 允許表達(dá)式,并且當(dāng)我文本框中的x或y值修改后,此{(lán){x*y}}會(huì)自動(dòng)重新計(jì)算,有點(diǎn)類似于我們自己寫的js計(jì)算后重新賦值到顯示框中的概念;下面我們來看vue中怎么定義一個(gè)方法,這里用到她的一個(gè)屬性methods,我們定義如下的代碼:
var app = new Vue({
el: "#appVue",
data: {
msg: "第一個(gè)vue",
blogs: [
{ title: "webapi" },
{ title: "wcf" },
{ title: "mvc" }
],
x: 444,
y: 2
},
methods: {
showMsg: function () {17 this.msg = "我是" + this.msg;
}
}
}
再來增加如下的html元素,
<button v-on:click="showMsg" class="btn">點(diǎn)擊</button>
好了再來看下運(yùn)行的效果圖并且多次點(diǎn)擊按鈕:

得到的效果是,一直在咋們 v-model="msg" 文本框中增加“我是”,這里得到的結(jié)論是按鈕出發(fā)了我們定義在vue中methods中的方法showMsg,再來看下按鈕上的這個(gè)屬性 v-on:click 就是用來表示綁定點(diǎn)擊事件的,這里的v-on:click可以縮寫成@click,由于我在vs中的mvc試圖模板不支持這種寫法,所以本篇還是使用v-on這種寫法來綁定事件;我們?cè)賮碛靡挥盟倪^濾器,這里咋們還是在vue中增加如下filters的代碼,定義一個(gè)大小寫的過濾器:
filters: {
toUpper: function (val, isUpper) {
if (!val) { return ""; }
return isUpper ? val.toUpperCase() : val.toLowerCase();
}
}
為了方便看效果,我們修改上面的v-model="msg"的文本框代碼如下:
<input type="text" v-model="msg" class="form-control" />{{msg|toUpper(true)}}<br />{{msg|toUpper(false)}}
我們?cè)谖谋究蛑性黾恿艘粋€(gè) {{msg|toUpper(true)}} 寫法,細(xì)心朋友能發(fā)下后面的toUpper就是我們剛才定義的過濾器的方法,傳遞了一個(gè)參數(shù)true,然后看下效果圖:

通過使用不同參數(shù)的filter的對(duì)比,能看出我們過濾器在此實(shí)例中的效果,這里注意的是在msg后面直接使用‘|'隔開就可以增加我們定義的過濾器了,如果多個(gè)以此類推使用‘|'追加隔開就行了,還有就是我們定義的 toUpper: function (val, isUpper) 方法中有兩個(gè)參數(shù),第一個(gè)參數(shù)就是綁定的msg本身,第二個(gè)參數(shù)才是我們需要手動(dòng)傳遞的,這個(gè)一定要分開;時(shí)間不多了,這里就不再講解其他的常用的特性和屬性了,直接來看下面vue使用webapi的數(shù)據(jù)體現(xiàn)的一個(gè)例子;
» WebApi + Vue.js 示例
首先,這里用到了Vue提供的組件概念component,她和js變量一樣有全局和局部(私有)兩種,代碼方面差距不是很大效果也一樣,這里我們用到的是局部方式來定義一個(gè)組件,下面先來看整體代碼:
var blogApp = new Vue({
el: "#divBlogs",
data: {
blogs: []
},
methods: {
getBlogs: function () {
var that = this;
$.getJSON("http://www.lovexins.com:1001/api/values?task=2", function (result) {
if (!result) { return; }
that.blogs = result;
});
}
},
components: {
"div-blog": {
props: ["item"],
template: '<div class=" bs-callout bs-callout-danger">' +
' <h4>' +
' <a v-bind:href="item.Url" target="_blank">{{item.Title | toUpperOrLower(false)}}</a>' +
' </h4>' +
' <p>' +
' {{item.Des}}' +
' </p>' +
' <hr />' +
' <h5>' +
' 作者:<a v-bind:href="item.BlogUrl" target="_blank">{{item.NickName}}</a> 發(fā)布時(shí)間:<code>{{item.CreateTime}}</code> 推薦:<code>{{item.ZanNum}}</code> 閱讀:<code>{{item.ReadNum}}</code> 評(píng)論:<code>{{item.CommiteNum}}</code>' +
' </h5>' +
' </div>',
filters: {
toUpperOrLower: function (val, isUpper) {
if (!val) { return ""; }
return isUpper ? val.toUpperCase() : val.toLowerCase();
}
}
}
}
});
這里定義的格式和上面第一小節(jié)使用到的差不多,只是多了一個(gè)components的定義,這個(gè)就是組件的關(guān)鍵字,咋們來逐一分析下代碼步驟;
1. blogs: []是我們定義的一個(gè)博客信息數(shù)組
2. methods屬性中g(shù)etBlogs方法用到了一段 var that = this; 這樣的代碼,這里的this是上面創(chuàng)建的 var blogApp = new Vue() 對(duì)象,她可以直接使用data中定義的博客數(shù)據(jù)數(shù)組blogs,因此有了下面通過jquery的getJSON獲取webapi數(shù)據(jù)后,直接賦值給博客數(shù)組bolgs
3. components組件中自定義了一個(gè)名為“div-blog”的組件,參數(shù)名稱是props定義的item;template是對(duì)應(yīng)的模板,里面可以直接使用item來獲取對(duì)應(yīng)的參數(shù)值;
4. 這里也定義了一個(gè)filters,同樣是轉(zhuǎn)大小寫的,寫法可以忽略了,主要注意的地方這里局部的定義的主鍵里面使用filters的時(shí)候也同樣是 {{item.Title | toUpperOrLower(false)}} 格式
好了通過上面總結(jié)注意點(diǎn),咋們?cè)賮砜聪略趺丛趆tml中使用這個(gè)自定義的組件呢,如下整體html代碼:
<div class="row" id="divBlogs"> <div class="col-md-12"> <button v-on:click="getBlogs" class="btn btn-default">查 詢</button> <div-blog v-for="blog in blogs" v-bind:item="blog"></div-blog> <div style="position:fixed; right:0px; bottom:10px; width:44px; height:40px; background-color:#F8F8F8; font-weight:100; cursor:pointer;" id="toTop" onclick="toTop()"> <img title="返 回" style="width:38px;height:38px;border:1px solid #ccc" src="http://121.42.208.152/images/top.png"> </div> </div> </div>
引用自定義組件的代碼就一句:
<div-blog v-for="blog in blogs" v-bind:item="blog"></div-blog>
這里的div-blog就是對(duì)應(yīng)上面總結(jié)的第3點(diǎn)說的,自定義主鍵名稱,需要注意的是如果自定義組件名稱格式如divBlog(駝峰格式),那么我們?cè)趆tml中使用格式就必須是div-Blog,通過‘-'分割開來,這個(gè)細(xì)節(jié)特別要注意不然頁面不會(huì)有效果,好了說了這么多來看下運(yùn)行的效果圖:

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- Vue.js學(xué)習(xí)之過濾器詳解
- Vue.js學(xué)習(xí)之計(jì)算屬性
- vue.js將unix時(shí)間戳轉(zhuǎn)換為自定義時(shí)間格式
- Vue.js系列之項(xiàng)目搭建(1)
- Vue.js中用v-bind綁定class的注意事項(xiàng)
- Vue.js使用v-show和v-if的注意事項(xiàng)
- 深入理解vue.js雙向綁定的實(shí)現(xiàn)原理
- Vue.js路由組件vue-router使用方法詳解
- Vue.js組件tabs實(shí)現(xiàn)選項(xiàng)卡切換效果
- 基于vue.js實(shí)現(xiàn)圖片輪播效果
- Vue.js 遞歸組件實(shí)現(xiàn)樹形菜單(實(shí)例分享)
相關(guān)文章
Element-UI日期選擇器(選擇日期范圍)禁用未來日期實(shí)現(xiàn)代碼
我們?cè)诰W(wǎng)頁開發(fā)時(shí)通常需要用到一些日期組件來方便用戶選擇時(shí)間,其中element日期組件是一個(gè)非常好用的工具,這篇文章主要給大家介紹了關(guān)于Element-UI日期選擇器(選擇日期范圍)禁用未來日期的相關(guān)資料,需要的朋友可以參考下2024-02-02
vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐教程
這篇文章主要給大家介紹了關(guān)于vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐的相關(guān)資料,其中包括vue-router 2.0的基礎(chǔ)用法、動(dòng)態(tài)路由匹配、嵌套路由、編程式路由、命名路由以及命名視圖等相關(guān)知識(shí),需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
Vue 3 中使用 OpenLayers 實(shí)時(shí)顯示 zoom 
本文介紹了如何在 Vue 3 中使用 OpenLayers 來獲取地圖的 zoom 值以及四角坐標(biāo)信息,并實(shí)時(shí)更新數(shù)據(jù),這種方式可以用于 GIS 應(yīng)用開發(fā),幫助用戶更好地了解當(dāng)前地圖范圍,感興趣的朋友一起看看吧2025-04-04
Vue 權(quán)限控制的兩種方法(路由驗(yàn)證)
這篇文章主要介紹了Vue 權(quán)限控制的兩種方法(路由驗(yàn)證),每種方法給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能及思路
這篇文章主要介紹了element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能,實(shí)現(xiàn)思路先給 el-menu加上 :collapse="isCollapse" 屬性,這個(gè)屬性也是 element 上的一個(gè)參數(shù),意思為是否開啟折疊動(dòng)畫,在 data 中定義 isCollapse ,用 true 和 false 控制展開與收起,需要的朋友可以參考下2023-01-01

