vue的数据绑定和列表渲染的造轮子

GitHub:八至

作者:狐狸家的鱼

双向数据绑定

Vue中数据的双向绑定-v-model

数据->页面

页面->数据

适用:input、select、textarea

<div id="app">
<!-- 数据输入 -->
<input type="text" v-model="message" >
<!-- 控制显示状态 -->
<input type="checkbox" v-model="checked">
<!-- 显示状态 -->
<label for="checkbox">{{checked}}</label>
<!-- 页面显示 -->
<p v-show="checked">{{message}}</p>
</div>
        var message = 'sue';
var vm = new Vue({
el:'#app',
data:{
message,
checked:true
}
})

这是一个简单的表单输入双向数据绑定,输入框中输入数据,会显示在页面,更改页面显示数据,也会改变输入框中的数据。

单选框控制页面显示状态,true-显示,false-隐藏

当更改输入框中数据时,页面显示也会同时改变

整个操作过程如下:

更改页面数据时,输入框的数据也会改变,在控制台改写数据:

操作过程如下:

列表渲染

列表渲染指令 v-for

语法:1.v-for='item,index in arr'

   2.v-for='value,key,index in object'

1. v-for='item,index in arr'

(1)把一个数组对应为一组元素进行渲染

<div id="app">
<ul>
<li v-for="item,index in list" :key="item.id">{{index}}.{{item}}</li>
</ul>
</div>
var vm = new Vue({
el:'#app',
data:{
list:['狐狸家的鱼','鱼家的狐狸','炸炸']
}
})

(2)数组的响应式数据变化

Vue提供观察数组的变异方法,会触发视图更新,主要有以下方法:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

例如追加数组元素,可以这样写:

vm.list.push(1000);

改变数组元素值,不可以直接用map方法,它不会改变原数组:

//不会改变原数组
vm.list.map(item =>item*3);

要改成这样:

//可以改变
vm.list = vm.list.map(item =>item*3);

注意!Vue 不能检测以下变动的数组:

  • 通过数组下标改变值:vm.list[0] = '修改元素值'
  • 通过数组length改变数组长度:vm.list.length = 1;

可以通过以下方法改成响应式的:

//通过数组下标改变数组元素值可以这样写
vm.list.splice(0,1,'sue');
//修改数组长度这样写
vm.list.splice(newLength);

2. v-for='value,key,index in object'

(1)通过一个对象的属性来迭代渲染

<div id="app">
<li v-for='value,key,index in obj'>{{value}}--{{key}}--{{index}}</li>
</ul>
</div>
var vm = new Vue({
el:'#app',
data:{
obj:{
a:1,
b:2,
c:3
}
}
})

(2)对象的响应式数据变化

注意!Vue 不能检测对象属性的添加或删除

可以使用以下方法:

  • 调用静态方法:Vue.set(object, key, value) 方法向嵌套对象添加响应式属性
  • 调用实例方法$set,比如:vm.$set(vm.obj,'ke','我是新增的');

条件判断

条件判断指令

1.v-if

语法:v-if="表达式"

根据表达式的值的真假条件渲染元素和移除元素

2.v-show

语法:v-show="表达式"

根据表达式的值的真假条件,切换元素的css属性和display属性

<div id="app">
<input type="checkbox" v-model="checked">
<p v-if="checked">{{checked}}</p>
<p v-show="checked">{{checked}}</p> </div>
let vm = new Vue({
el:'#app',
data:{
checked:true
}
})

结合数据绑定、列表渲染、条件判断造的轮子—表格登记

其他轮子称为留言板,我觉得更像表格登记,(●ˇ∀ˇ●)

全部代码:

    <div class="container" id="box">
<form role="form" >
<div class="form-group">
<label for="username" class="h5">用户名:</label>
<input v-model="username" id="username" class="form-control" placeholder="输入用户名" type="text">
</div>
<div class="form-group">
<label for="age" class="h5">年龄:</label>
<input v-model="age" id="age" class="form-control" placeholder="输入年龄" type="text">
</div>
<div class="form-group">
<label for="classroom" class="h5">班级:</label>
<input v-model="classroom" id="classroom" class="form-control" placeholder="输入班级" type="text">
</div>
<div class="form-group">
<input value="添加" v-on:click="add" class="btn btn-primary" type="button">
<input value="重置" v-on:click="clearInput" class="btn btn-danger" type="button">
</div>
</form>
<!-- 分割线 -->
<hr>
<table class="table table-bordered table-hover">
<caption class="h3 text-info text-center">用户信息表</caption>
<tr class="text-info">
<th class="text-center">序号</th>
<th class="text-center">用户名</th>
<th class="text-center">年龄</th>
<th class="text-center">班级</th>
<th class="text-center">操作</th>
</tr>
<tr class="text-center" v-for="(item,index) in myData" :key="item.id">
<td>{{index+1}}</td>
<td>{{item.name}}</td>
<td>{{item.age}}</td>
<td>{{item.classroom}}</td>
<td>
<input type="button" value="删除" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#layer" v-on:click="currentIndex=index">
</td>
</tr>
<tr v-show="myData.length!=0">
<td colspan='5' class="text-center">
<button class="btn btn-danger btn-sm" v-on:click="deleteAll">删除全部</button>
</td>
</tr>
<tr v-show="myData.length == 0">
<td colspan='5' class="text-center text-muted">
<p>暂无数据...</p>
</td>
</tr>
</table>
<div role="dialog" class="modal" id="layer">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button class="close" data-dismiss="moadl">
<span></span>
</button>
<h4 class="modal-title">确认要删除此行数据吗</h4>
</div>
<div class="modal-body text-right">
<button class="btn btn-primary" data-dismiss="modal">取消</button>
<button class="btn btn-danger" data-dismiss="modal" v-on:click="deleteItem(currentIndex)">确认</button>
</div>
</div>
</div>
</div>
</div> <script>
new Vue({
el:'#box',
data:{
myData:[],
username:"",
age:"",
classroom:"",
currentIndex:""
},
methods: {
add:function(){
this.myData.push({
name:this.username,
age:this.age,
classroom:this.classroom
});
this.username = '';
this.age = '';
this.classroom = '';
},
clearInput:function(){//清空输入 重置
this.username = '';
this.age = '';
this.classroom = '';
},
deleteItem:function(index){
this.myData.splice(index,1);//删除当前行数据
},
deleteAll:function(){
this.myData = [];//清空所有数据
}
}
});
</script>

vue学习笔记(二)- 数据绑定、列表渲染、条件判断的更多相关文章

  1. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  2. vue学习笔记二:v-if和v-show的区别

    v-if vs v-show v-if 是“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建. v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做—— ...

  3. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  4. python 学习笔记二 (列表推导式)

    2018年年初写了第一篇博客,说要做一个认真的技术人 https://www.cnblogs.com/yingchen/p/8455507.html 今天已经是11月19日了,这是第二篇博客,看来坚持 ...

  5. .net Core学习笔记2 实现列表的条件筛选,排序,分页

    打开vs,完善上次"简单粗暴"的项目 发现上次的实体类的导航属性有点问题,这是更改后的 namespace ProductMvc.Models { public class Pro ...

  6. Vue学习笔记九:列表案例

    目录 前言 Bootstrap插件下载 Bootstrap表格和面板 增加数据,v-model和v-on 删除数据,事件修饰符和找索引的两种方法 查询数据,foreach和filter 全部的HTML ...

  7. VUE学习笔记二

    package.json不可以写注释!!!!!!!!!!初始化:npm init -y 有时候使用 npm i node-sass -D 装不上,这时候,就必须使用  cnpm i node-sass ...

  8. python基础学习笔记二之列表

    1.列表 ①列表的创建: ②列表的查询(索引): ③列表的切片操作: 此处要注意到:返回索引0到3的元素,顾头不顾尾. ④列表的增加: s.append()  #直接在结尾追加 s.insert()  ...

  9. Vue学习笔记二:v-cloak,v-text,v-html的使用

    目录 v-cloak:解决插值表达式闪烁问题 安装插件Live Server 右键以HTTP形式运行HTML v-text:以属性方式使用插值表达式 v-cloak和v-text的区别 v-html: ...

  10. VUE 学习笔记 二 生命周期

    1.除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来 var data = { a: 1 } var vm = new Vue({ el: ' ...

随机推荐

  1. CRM系统数据授权

    1.新建角色,华东二区 2.业务对象中找到客户管理 3.在数据范围中新建数据规则,并进行设置 4.点击授权后,生效. 另:数据权限设置

  2. Java基础——对象容器(顺序、集合、Hash)

    扩展: For-each循环 for (String s: str) { System.out.println(s); } 等同于for (int i = 0; i < str.length; ...

  3. hadoop分布式系统架构详解

    hadoop 简单来说就是用 java写的分布式 ,处理大数据的框架,主要思想是 “分组合并” 思想. 分组:比如 有一个大型数据,那么他就会将这个数据按照算法分成多份,每份存储在 从属主机上,并且在 ...

  4. Linux的基础命令, django的安装与使用

    一. Linux一些基础指令 cat命令, 用于查看纯文本文件(常用于内容较少的) cat 校花的故事.txt # 查看文件 cat -n 校花的故事.txt # 查看文件并显示行号 -n 显示行号 ...

  5. python学习笔记(11)--测验3: Python基础语法(下) (第7周)

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

  6. nginx 卸载后重新安装/etc/nginx配置文件没了,cannot open /etc/nginx/nginx.conf (No such file or directory)

    sudo apt-get --purge remove nginx-common sudo apt-get --purge remove nginx* sudo apt-get autoremove ...

  7. Oracle minus用法详解及应用实例

    本文转载:https://blog.csdn.net/jhon_03/article/details/78321937 Oracle minus用法 “minus”直接翻译为中文是“减”的意思,在Or ...

  8. codeforces589I

    Lottery CodeForces - 589I Today Berland holds a lottery with a prize — a huge sum of money! There ar ...

  9. Go语言函数相关

    1.函数的声明定义 //func关键字 //getStudent函数名 //(id int, classId int) 参数列表 //(name string,age int) 返回值列表 func ...

  10. PXE网络装机

    PXE网络装机配置 安装CentOS 6.5系统 1.配置服务端IP地址和yum源 略 2.安装配置VSFTP服务 vsftpd 的作用:为客户端提供FTP服务,便于客户端下载操作系统 (1)安装vs ...