Vue.js实战
指令
什么是指令
指令,directives,是vue非常常用的功能,在template里。
- 都是以v-开头
- 不是自己所为html元素,比如假设指令叫v-abc,没有这种写法,这是组件(component)的写法,组件也是vue的一个强大功能
- 都是在html元素里写,比如
或者这样子的写法居多
- 主要都是用于决定是否渲染,怎么渲染的功能
v-if指令
- html元素根据v-if的结果是否为真从而决定是否渲染
- 放在html元素里,比如div,也可以放在vue的
<template>
里(v-show不行) - 用等于号赋予表达式
- 表达式需要用等号包裹
- 表达式里直接写变量名称,变量不需要再用等号包裹,比如
,如果status的值为1,这个div就会渲染显示,否则不显示- 如果是字符串,可以加单引号,这么写:
...
注意,cnblogs里不能直接写template标签,要用markdown的单引号包裹起来,否则后面的内容不显示。
v-else-if和v-else指令
- 必须和v-if指令配置使用
- 写法为比如:
...
v-for指令
- 列表的循环渲染指令
- 必须用in来使用
- 比如:
购物车
下面通过vue实现一个购物车的增加、减少商品数量,并且自动计算总价格的功能。
实现后的样子如下图:
html
html的代码如下。
<div id="app" v-cloak>
<!-- vue指令:v-if,放在标签中,如果为真则该标签会显示 -->
<template v-if="list.length">
<table>
<thead>
<tr>
<th></th>
<th>商品名称</th>
<th>商品单价</th>
<th>商品数量</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- vue的指令:v-for -->
<tr v-for="(item, index) in list">
<td>{{ index + 1 }}</td><!-- vue都是用{{}}来使用变量 -->
<td>{{ item.name }}</td>
<td>{{ item.price }}</td>
<td>
<!-- vue指令:v-on,绑定事件 -->
<button v-on:click="handleReduce(index)">-</button>
{{ item.count }}
<!-- v-on的语法糖:@,一般都是用@,不写v-on -->
<button @click="handleAdd(index)">+</button>
</td>
<td><button @click='handleRemove'>移除</button></td>
</tr>
</tbody>
</table>
<div>总价:¥ {{ totalPrice }}</div>
</t emplate>
<!-- v-if放在template标签,而v-else可以放在div,也就说不需要有标签的对应关系。
但是需要有层次的对应关系,如果放在div外,则不生效。 -->
<div v-else>您的购物车为空</div>
</div>
js
var app = new Vue({
el: '#app',
data: {
// list是一个数组
list: [
// id等不需要引号
{ id: 1, name: 'iphone XS', price: 6599, count: 1 },
{ id: 2, name: 'iphone XR', price: 4399, count: 1 },
{ id: 3, name: 'iphone XS Max', price: 7499, count: 1 }
]
},
computed: {
totalPrice: function () {
return this.list[0].price * this.list[0].count;
}
},
methods: {
// 方法定义用:号,不能用=号
handleAdd: function (index) {
this.list[index].count++;
},// 方法之间必须有逗号分隔
handleReduce: function (index) {
if (this.list[index].count > 0)
this.list[index].count--;
},
handleRemove: function (index) {
// js的spilce函数:(start: number, deleteCount?: number),vscode会提示详细解释。
this.list.splice(index, 1);
}
}
})
css
table{
border: 1px solid #e9e9e9;/*表格框宽度、显示、颜色*/
border-collapse: collapse;
border-spacing: 0;
empty-cells: show;
}
th, td{/*表格头和表格体的样式*/
padding: 8px 16px;
border: 1px solid #e9e9e9;/*深灰色*/
text-align: left;
background: white;/*白色*/
}
th{/*表格头的样式*/
background: #f7f7f7;/*表格头的底色:浅灰色*/
color: #5c6b77;
font-weight: 600;
white-space: nowrap;
}
2019.1.6
参考资料
《Vue.js实现》清华大学出版社
markdown_highlight();
var allowComments = true, cb_blogId = 215598, cb_blogApp = 'ouyida3', cb_blogUserGuid = '3104de9e-bfaa-e411-b908-9dcfd8948a71';
var cb_entryId = 10229269, cb_entryCreatedDate = '2019-05-25 10:13', cb_postType = 1;
loadViewCount(cb_entryId);
loadSideColumnAd();var commentManager = new blogCommentManager();
commentManager.renderComments(0);var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];googletag.cmd.push(function () {
googletag.defineSlot("/1090369/C1", [300, 250], "div-gpt-ad-1546353474406-0").addService(googletag.pubads());
googletag.defineSlot("/1090369/C2", [468, 60], "div-gpt-ad-1539008685004-0").addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
});fixPostBody();
deliverBigBanner();
setTimeout(function() { incrementViewCount(cb_entryId); }, 50); deliverAdT2();
deliverAdC1();
deliverAdC2();
loadNewsAndKb();
loadBlogSignature();
LoadPostCategoriesTags(cb_blogId, cb_entryId); LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType);
loadOptUnderPost();
GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);Vue.js实战的更多相关文章
- vue.js实战——购物车练习(包含全选功能)
vue.js实战第5章 54页的练习1 直接放代码好了,全选的部分搞了好久,代码好像有点啰嗦,好在实现功能了(*^▽^*) HTML: <!DOCTYPE html> <html l ...
- 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能
大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...
- 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站
这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...
- vue.js 实战 todo list
vue.js 起源 vue.js 的作者是尤雨溪,是一名中国人,之前在谷歌工作,现在在全职维护 vue 项目. vue.js 是 2014 年推出来的.现在已经更新到 2.x 版本,3.0 版本会在 ...
- vue.js实战(文摘)
---------------第1篇 基础篇 第1章 初始vue.js 第2章 数据绑定和第一个vue应用 第3章 计算属性 第4章 v-bind及class与style绑定 第5章 内置命令 第6章 ...
- Vue.js 实战教程(附demo)
在实战之前,你需要对vuejs的基础语法有一定的了解,可以通过以下几个途径进行学习: vue.js官方文档:https://cn.vuejs.org/v2/guide/index.html vue.j ...
- Vue.js 实战总结
最近在某个项目中用到了Vue.js,从上手做开发到项目发布,一步步踩了不少坑.本文试图总结过去一个多月使用Vue.js中的一些经验,也算是一点心得体会吧,拿出来与大家分享,欢迎多多交流. Vue.js ...
- vue.js实战——props单向数据流
Vue2.x通过props传递数据是单向的了,也就是父组件数据变化时会传递给子组件,但是反过来不行. 业务中会经常遇到两种需要改变prop的情况, 一种是父组件传递初始值进来,子组件将它作为初始值保存 ...
- vue.js实战——升级版购物车
HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- vue.js实战——$event
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 从 Spring Cloud 看一个微服务框架的「五脏六腑」(转)
Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 本文将从 Spring Cloud 出发,分两小节讲述微服务框架的「五脏六腑」: ...
- UVA 10529 - Dumb Bones(概率+区间dp)
UVA 10529 - Dumb Bones option=com_onlinejudge&Itemid=8&category=518&page=show_problem&am ...
- MongoDB学习笔记(1):MongoDB的安装和说明
MongoDB学习笔记(1):MongoDB的安装和说明 快速开始 下载地址 官网下载: https://www.mongodb.com/download-center?jmp=nav#communi ...
- 内核Alsa之pcm
pcm用来描述alsa中数字音频流.Alsa音频的播放/录制就是通过pcm来实现 的. 名词解释 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语. Frame. 帧是音频流中 ...
- 如何配置DSI时钟频率
[DESCRIPTION] 计算DSI数据速率的方式,以及如何配置时钟clk的方式 [KEYWORD] dsi.data rate.mipi clk [SOLUTION] 1.DSI vdo mode ...
- Backbone vs AngularJS
首先 Backbone 没有 AngularJS 那么容易上手. 而且作者并没有想让Backbone草根化的意思. Backbone 比喻成战斗机. 看上去更像是真正的MVC框架, model-vie ...
- 自定义标签(客户化jsp标签)
客户化jsp标签技术是在jsp1.1版本中才出现的,他支持用户在jsp文件中自定义标签,这样可以使jsp代码更加简单,这些可重用的标签能够处理复杂的逻辑运算和事物或定义jsp网页的输出内容和格式. 创 ...
- {{badmatch, {error, eexist}}
今天在编译cowboy工程在resolve release build时提示编译错误:{{badmatch, {error, eexist}} 后经调查可能是因为rebar的bug导致的,可是删除_b ...
- 【EOJ Monthly 2018.2 (Good bye 2017)】
23333333333333333 由于情人节要回家,所以就先只放代码了. 此题是与我胖虎过不去. [E. 出老千的 xjj] #include<cstdio> #include<c ...
- [LeetCode] Shortest Distance from All Buildings Solution
之前听朋友说LeetCode出了一道新题,但是一直在TLE,我就找时间做了一下.这题是一个比较典型的BFS的题目,自己匆忙写了一个答案,没有考虑优化的问题,应该是有更好的解法的. 原题如下: You ...