1.标签内容绑定

  • 双括号语法:使用 {{}} 将变量包裹起来,vue会将变量的值解析为普通文本,而非 HTML 代码
<div>{{msg}}</div>
<div>{{html}}</div>
data() {
return {
msg:"good day",
html:"<h2>我是h2</h2>"
}
}

渲染结果:

  • v-html/v-text指令:相当于对当前标签元素中的innerHTML/innerText属性进行赋值
<div v-text="msg"></div>
<div v-html="html"></div>
data() {
return {
msg:"good day",
html:"<h2>我是h2</h2>"
}
}

渲染结果:

2.标签属性绑定

  • 属性值绑定:在标签属性前加上":",即可将属性值当作变量进行解析
<!-- 不使用v-bind -->
<div title="msg">不使用v-bind:</div>
<!-- msg值为good day -->
<div v-bind:title="msg">使用v-bind:</div>
<!-- 简写 -->
<div :title="msg">使用v-bind:简写</div>

渲染结果:

<div title="msg">不使用v-bind:</div>
<div title="good day">使用v-bind:</div>
<div title="good day">使用v-bind:简写</div>
  • 属性名绑定:属性名使用变量进行渲染
<body>
<div id="app">
<h2 :[attr]="value">{{msg}}</h2>
</div>
</body>
</html>
<script src="./vue.min.js"></script>
<script>
new Vue({
el:"#app",
data(){
return {
msg:"Vue.js 2.x",
attr:"title",
value:"我是参数值"
}
},
})
</script>

渲染结果:

<h2 title="我是参数值">Vue.js 2.x</h2>

3.双向数据绑定

  • 使用v-model指令将数据与表单元素的值进行双向绑定,表单的初始状态通过其绑定的数据进行控制,同时切换表单的状态时,也会同步更新其绑定的数据
  • 对于文本框和文本域,绑定其value属性,同时监听input事件
  • 对于单选框和下拉框,绑定其value属性,同时监听change事件
  • 对于多选框,通常为其绑定一个数组,选中的多选框的值会被push到数组中
  • 实际开发中,不会使用原生的表单元素,通常都是使用UI框架自带的表单,使用方法参见相关文档
  • 如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符
  • 如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:
<body>
<div id="app">
<input type="text" v-model.tirm="input" @input="onInput">
<input v-model.number="age" type="number">
</div>
</body>
</html>
<script src="./vue.min.js"></script>
<script>
new Vue({
el:"#app",
data(){
return {
input:"我是初始值",
age: 20,
}
},
methods:{
onInput(){
console.log(this.input)
}
}
})
</script>
  • 自定义组件中的model: v-model其实是v-bind和自定义事件的语法糖,通过v-bind将数据传递给子组件特定的prop,再通过触发特定的自定义事件,将子组件的数据同步给父组件,v-model相关的prop和自定义事件通过model字段进行定义
model:{
prop:"value",//定义v-model的值传递给那个prop属性
event:"input",//定义此事件触发时,自动更新父组件v-model对应的数据
}

4.样式绑定

  • 对象语法:用于控制某个类名的添加和移除状态
<body>
<div id="app">
<!-- flag为true 添加active类 -->
<div :class="{'active':flag}">激活</div>
<!-- flag为false 移除active类 -->
<div :class="{'active':flag2}">未激活</div>
</div>
</body>

渲染结果:

<div id="app">
<div class="active">激活</div>
<div class="">未激活</div>
</div>
  • 数组语法:用数组形式控制元素的classlist,数组元素可以是常量,也可以是变量
<body>
<div id="app">
<div :class="['box',color]">Vue.js</div>
</div>
</body>
<script>
new Vue({
el:"#app",
data(){
return {
color: 'red',
}
},
})
</script>

渲染结果:

<div id="app">
<div class="box red">Vue.js</div>
</div>
  • 内联样式:通过v-bind指令,给style属性绑定一个对象,对象的属性名为样式名,对象的属性值为样式值
<body>
<div id="app">
<div :style="{'color':color,'font-size':size}">Vue.js</div>
</div>
</body>
<script>
new Vue({
el:"#app",
data(){
return {
color: 'red',
size: '18px'
}
},
})
</script>

渲染结果:

<div id="app">
<div style="color: red; font-size: 18px;">Vue.js</div>
</div>

4.元素的显示/隐藏/销毁

  • v-if/v-else-if/v-else:指令值为布尔值,为true则对元素进行渲染,为false则销毁该元素
  • v-show:控制元素的显示与隐藏,相当于操作display属性
  • 注意,v-show 不支持 template 元素
<body>
<div id="app">
<div>
<div v-if="type=='a'">模版A</div>
<div v-else-if="type=='b'">模版B</div>
<div v-else>模版C</div>
</div>
<div>
<div v-show="type=='a'">模版A</div>
<div v-show="type=='b'">模版B</div>
<div v-show="type=='c'">模版C</div>
</div>
</div>
</body>
</html>
<script src="./vue.min.js"></script>
<script>
new Vue({
el:"#app",
data(){
return {
type: 'c'
}
},
})
</script>

渲染结果:

<div id="app">
<div>
<div>模版C</div>
</div>
<div>
<div style="display: none;">模版A</div>
<div style="display: none;">模版B</div>
<div>模版C</div>
</div>
</div>

5.模版循环

  • 通过v-for指令,循环创建多个HTML模版,被循环对象可是是数组,对象,整数
  • 不要与v-if进行混用,如有需要可对数组进行过滤操作再进行循环
  • 循环整数时,第一个循环项是1
<body>
<div id="app">
<!-- 循环数组 -->
<ul>
<li v-for="(item,index) in list" :key="index">{{item}}</li>
</ul>
<!-- 循环对象 -->
<ul>
<li v-for="(val,key) in obj" :key="key">{{key}}:{{val}}</li>
</ul>
<!-- 循环整数 -->
<ul>
<li v-for="(n,index) in 5" :key="index">{{index}} - {{n}}</li>
</ul>
</div>
</body>
</html>
<script src="./vue.min.js"></script>
<script>
new Vue({
el:"#app",
data(){
return {
list:[1,2,3,4],
obj:{
name:'张三',age:20
}
}
},
})
</script>

6.v-for中的key

  • 看看官方文档是怎么说的
当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。
  • 如何理解这个“就地更新”
<!-- list = [ 1,2,3,4,5] -->
<ul>
<li v-for="(n,index) in list"style="margin-top:10px;">
<span>{{n}}</span>
<div class="btn" @click="handleDelete(n)">删除</div>
</li>
</ul>

  • 一般情况下,这种模式不会有问题,但是也有例外,看看官方文档的说法
这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出。
  • 用实例来验证:相比上面的例子,多出了一个输入框,且这个输入框没有进行数据绑定
<!-- list = [ 1,2,3,4,5] -->
<ul>
<li v-for="(n,index) in list"style="margin-top:10px;">
<span>{{n}}</span>
<input type="text" style="padding:6px;">
<div class="btn" @click="handleDelete(n)">删除</div>
</li>
</ul>

  • 如果为其设定了key,则数组发送变动时,不会复用之前的dom,就不会出现上面输入框异常的情形
<!-- list = [ 1,2,3,4,5] -->
<ul>
<li v-for="(n,index) in list" :key="n" style="margin-top:10px;">
<span>{{n}}</span>
<input type="text" style="padding:6px;">
<div class="btn" @click="handleDelete(n)">删除</div>
</li>
</ul>

  • 下面的写法是等效的:循环数组用下标为key等于没写
<li v-for="(n,index) in list">
<li v-for="(n,index) in list" :key="index">

Vue.js 数据绑定的更多相关文章

  1. Vue.js 数据绑定语法详解

    Vue.js 数据绑定语法详解 一.总结 一句话总结:Vue.js 的模板是基于 DOM 实现的.这意味着所有的 Vue.js 模板都是可解析的有效的 HTML,且通过一些特殊的特性做了增强.Vue ...

  2. vue.js数据绑定

      语法         插值             双大括号:{{text}} {{*text}}之渲染第一次 {{{html}}}        表达式(各种数值,变量,运算符的综合体)     ...

  3. vue.js数据绑定语法

    原始高清大图下载 1.数据绑定 html代码: <div id="first" class="first">msg:{{msg}}</div& ...

  4. Vuebnb 一个用 vue.js + Laravel 构建的全栈应用

    今年我一直在写一本新书叫全栈Vue网站开发:Vue.js,Vuex和Laravel.它会在Packt出版社在2018年初出版. 这本书是围绕着一个案例研究项目,Vuebnb,简单克隆Airbnb.在这 ...

  5. Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶

    Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...

  6. vue.js基础知识篇(1):简介、数据绑定

    目录第一章:vue.js是什么? 第二章:数据绑定第三章:指令第四章:计算属性第五章:表单控件绑定代码链接: http://pan.baidu.com/s/1qXCfzRI 密码: 5j79 第一章: ...

  7. 从Vue.js源码角度再看数据绑定

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...

  8. Vue.js 学习笔记 第2章 数据绑定和第一个Vue应用

    本篇目录: 2.1 Vue实例与数据绑定 2.2 指令与事件 2.3 语法糖 学习任何一种框架,从一个Hello World应用开始是最快了解该框架特性的途径. 我们先从一段简单的HTML代码开始,感 ...

  9. Vue.js MVVM及数据绑定原理

    什么是数据驱动 数据驱动是vuejs最大的特点.在vuejs中,所谓的数据驱动就是当数据发生变化的时候,用户界面发生相应的变化,开发者不需要手动的去修改dom. 比如说我们点击一个button,需要元 ...

  10. python70 前端框架之vue js的集中循环方式、key值的解释、input事件、v-model双向数据绑定、过滤案例、事件修饰符、按键修饰符、表单控制

    js的几种循环方式 v-for可以循环的变量 可以循环的: 数组.数组带索引 对象.对象带key.value 字符串 字符串带索引 数字.数字带索引 <!DOCTYPE html> < ...

随机推荐

  1. Naive UI 2.38.1

    https://www.naiveui.com/zh-CN/os-theme/docs/i18n 配置字体 Naive UI 可以和 vfonts 配合,你可以简单的引入 vfonts 中的字体,包含 ...

  2. Linux_Bash_Shell_索引数组和关联数组及稀疏数组

    1. 索引数组 一.什么是索引数组? 所谓索引数组就是普通数组,以整数作为数组元素的索引下标. 二.实例. 备注: (a)使用-a选项定义索引数组,使用一对小括号()定义数组中的元素列表. (b)索引 ...

  3. 贝壳找房携手 Flutter,为三亿家庭提供更好的居住服务 | Flutter 开发者故事

    贝壳找房是科技驱动的新居住服务平台,致力于在二手房.新房.租房以及装修等居住领域为三亿家庭提供全方位的品质居住服务.如此庞大的用户群体,自然也有着十分多样和复杂的使用场景和需求.以往使用原生开发模式时 ...

  4. 从SQL Server过渡到PostgreSQL:理解模式的差异

    从SQL Server过渡到PostgreSQL:理解模式的差异 前言 随着越来越多的企业转向开源技术,商业数据库管理员和开发者也逐渐面临向PostgreSQL迁移的需求. 虽然SQL Server和 ...

  5. 分析ueventd Coldboot耗时问题

    安卓go平台启动时间发现如下ueventd耗时1.907s问题: 01-11 00:20:02.854 0 0 I init : Parsing file /odm/etc/init... 01-11 ...

  6. ptmalloc、tcmalloc与jemalloc对比分析

    背景介绍 在开发微信看一看期间,为了进行耗时优化,基础库这层按照惯例使用tcmalloc替代glibc标配的ptmalloc做优化,CPU消耗和耗时确实有所降低.但在晚上高峰时期,在CPU刚刚超过50 ...

  7. M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略

    前言 大家好,我是 Frpee内网穿透 开发者 xnkyn, 曾经的我一直在互联网上学习技术,这次我要在博客园这片净土上给中国互联网技术做贡献,这是我在博客园写的第一篇技术文章,后续我会分享更多的技术 ...

  8. Android复习(二)应用资源 --> 动画

    没什么好总结的 复制自 https://developer.android.google.cn/guide/topics/resources/animation-resource 有需要的可以查看官方 ...

  9. 妙用编辑器:使用Notepad--宏功能提高维护指令生成生成效率

    应用场景 日常维护工作中,需要快速生成一批指令来完成某些操作,比如:快速添加一批节点. 目标指令列表如下: ADD NODE: ID=1, NAME="NODE_1"; ADD N ...

  10. Python入门:A+B问题

    1. A + B 问题I 前言 本篇作为课程第一篇,主要是对Python基础语法进行扫盲,本节课会学习到下面知识: 输入 本道题目的工作任务很简单,只是计算两个数的和,但是在计算之前,我们首先要明确的 ...