1.样式的绑定

我们可以传给 v-bind:class 一个对象,以动态地切换 class   例如:

:class="{activated:isactivated}"

上面的语法表示 activated 的更新将取决于数据属性 isActive 是否为 真值 。

实现动态切换:
<div @click="HandleDivClick" :class="{activated:isactivated}">hello world</div>
HandleDivClick:function () {
this.isactivated = !this.isactivated
}

:class = "[class1,class2,class3......]"  添加多个样式

<div @click="HandleDivClick1" :class="[activated,'defaultClass']">hello world1</div>
HandleDivClick1:function () {
this.activated = this.activated==='activated'?'':'activated';
}

2.绑定内联样式

v-bind:style 的对象语法十分直观——看着非常像 CSS ,其实它是一个 JavaScript 对象。 CSS 属性名可以用驼峰式(camelCase)或短横分隔命名(kebab-case)


<div :style="styleObj" @click="HandleDivClick2">my style</div>
styleObj:{
color:'black',
fontSize:'50px'
}
HandleDivClick1:function () {
this.activated = this.activated==='activated'?'':'activated';
}
<div :style="[styleObj,{cursor:'pointer'}]" @click="HandleDivClick2">my style</div>
HandleDivClick2:function () {
this.styleObj.color = this.styleObj.color==='black'?'red':'black';
}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>样式绑定</title>
<script src="../../vue.js"></script>
<style>
.activated{color: red}
.activated1{color: yellow}
.myfontSize{font-size: 20px}
</style>
</head>
<body>
<div id="app">
<div @click="HandleDivClick" :class="{activated:isactivated}">hello world</div> <div @click="HandleDivClick1" :class="[activated]">hello world1</div> <!--#多个样式-->
<div @click="HandleDivClick1" :class="[activated,'myfontSize']">hello world12</div> <div :style="styleObj" @click="HandleDivClick2">my style</div> <div :style="[styleObj,{cursor:'pointer'}]" @click="HandleDivClick2">my style</div> </div>
<script>
var vm = new Vue({
el:"#app",
data:{
isactivated:false,
activated:'',
styleObj:{
color:'black',
fontSize:'50px'
}
},
methods:{
HandleDivClick:function () {
this.isactivated = !this.isactivated
},
HandleDivClick1:function () {
this.activated = this.activated==='activated'?'':'activated';
},
HandleDivClick2:function () {
this.styleObj.color = this.styleObj.color==='black'?'red':'black';
}
}
})
</script>
</body>
</html>

3.条件渲染 

v-if 是真实的条件渲染,因为它会确保条件块在切换当中适当地销毁与重建条件块内的事件监听器和子组件。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来)。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>条件渲染</title>
<script src="../../vue.js"></script>
</head>
<div id="app"> <div v-if="show" data-test="v-if">{{message}}</div>
<div v-else>Bye</div>
<!--v-else 元素必须紧跟在 v-if 或 v-show 元素的后面——否则它不能被识别--> <!--#dom在页面上存在,display: none;-->
<div v-show="show" data-test="v-show">{{message}}</div> <template>
<div v-if="charactor === 'a'">This is A</div>
<div v-else-if="charactor==='b'">This is B</div>
<div v-else>This is others</div>
</template> <div v-if="myinput==='email'">
邮箱:
<input type="text" key="email">
</div>
<div v-else>
用户名:
<input type="text" key="username">
</div>
</div>
<body>
<script>
var vm = new Vue({
el:"#app",
data:{
show:false,
message:'hello world',
charactor:'a',
myinput:'email'
}
})
</script>
</body>
</html>

相比之下, v-show 简单得多——元素始终被编译并保留,只是简单地基于 CSS 切换。

一般来说, v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换使用 v-show 较好,如果在运行时条件不大可能改变则使用 v-if 较好

因为 v-if 是一个指令,需要将它添加到一个元素上。但是如果我们想切换多个元素呢?此时我们可以把一个 <template> 元素当做包装元素,并在上面使用 v-if,最终的渲染结果不会包含它

4.列表渲染

我们用 v-for 指令根据一组数组的选项列表进行渲染。 v-for 指令需要以 item in items 形式的特殊语法, items 是源数据数组并且 item 是数组元素迭代的别名

你也可以用 of 替代 in 作为分隔符,因为它是最接近 JavaScript 迭代器的语法

列表的遍历:

    <div v-for="(item,index) in list" :key="item.id">
{{item.text}}--{{index}}
</div>
list:[
{
id:'asjdflsfsaf',
text:'hello'
},
{
id:'12316581',
text:'dong'
},
{
id:'wefdsadf',
text:'nyyyy'
},
],

对象的遍历:

UserInfo:{
username:"boss dong",
age:20,
school:'ny'
}
<!--key:键 item:值 index:索引-->
<div v-for="(item,key,index) in UserInfo">
{{item}}---{{key}}---{{index}}
</div>
vue数组方法:push pop shift unshift splice sort reverse

重点 数据视图双向修改:

列表数据的修改(例如修改第二项):
//方法1. splice()
// 语法
// arrayObject.splice(index,howmany,item1,.....,itemX)
// 参数 描述
// index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
// howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
// item1, ..., itemX 可选。向数组添加的新项目。
this.list.splice(1,1,{id:'xlj',text:'new dong'});
// 方法2.修改引用
this.list=[
{
id:'asjdflsfsaf',
text:'hello'
},
{
id:'12316581',
text:'new dong'
},
{
id:'wefdsadf',
text:'nyyyy'
},
]
// 方法3:
Vue.set(this.list,1,{    id:'456789',    text:'changed by Vue.set'})
对象数据的修改:
//方法1:// this.UserInfo.username = 'new boss';
// 方法2:
Vue.set(this.UserInfo,'username','new boss');

   对象增加数据:

// 方法1.添加一个plac字段,修改引用
// this.UserInfo = {
// username:"boss dong",
// age:20,
// school:'ny',
// place:'重庆'
// }
//方法2.Vue.set方法
Vue.set(this.UserInfo,'place','北京')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>列表渲染</title>
<script src="../../vue.js"></script>
</head>
<body>
<div id="app">
<div v-for="(item,index) in list" :key="item.id">
{{item.text}}--{{index}}
</div>
<button @click="HandleBtnClick">修改dong</button> <!--<template v-for="(item,index) in list">-->
<!--<div :key="item.id">-->
<!--{{item.text}}--{{index}}-->
<!--</div>-->
<!--<span>{{item.text}}</span>-->
<!--</template>--> <!--对象的遍历-->
<!--key:键 item:值 index:索引-->
<div v-for="(item,key,index) in UserInfo">
{{item}}---{{key}}---{{index}}
</div>
<button @click="ChangInfo">修改Info</button>
<button @click="AddInfoPlace">添加地址</button>
</div>
<script>
//vue数组方法:push pop shift unshift splice sort reverse var vm = new Vue({
el:"#app",
data:{
list:[
{
id:'asjdflsfsaf',
text:'hello'
},
{
id:'12316581',
text:'dong'
},
{
id:'wefdsadf',
text:'nyyyy'
},
],
UserInfo:{
username:"boss dong",
age:20,
school:'ny'
}
},
methods:{
HandleBtnClick:function () {
// #修改第二项 //方法1. splice()
// 语法
// arrayObject.splice(index,howmany,item1,.....,itemX)
// 参数 描述
// index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
// howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
// item1, ..., itemX 可选。向数组添加的新项目。
// this.list.splice(1,1,{id:'xlj',text:'new dong'}); // 方法2.修改引用
this.list=[
{
id:'asjdflsfsaf',
text:'hello'
},
{
id:'12316581',
text:'new dong'
},
{
id:'wefdsadf',
text:'nyyyy'
},
] // 方法3:
Vue.set(this.list,1,{
id:'456789',
text:'changed by Vue.set'
})
},
ChangInfo:function () {
//方法1:
// this.UserInfo.username = 'new boss';
// 方法2:
Vue.set(this.UserInfo,'username','new boss');
},
AddInfoPlace:function () {
// 方法1.添加一个plac字段,修改引用
// this.UserInfo = {
// username:"boss dong",
// age:20,
// school:'ny',
// place:'重庆'
// }
//方法2.Vue.set方法
Vue.set(this.UserInfo,'place','北京')
}
}
})
</script>
</body>
</html>
												

Vue2.5开发去哪儿网App 第三章笔记 下的更多相关文章

  1. Vue2.5开发去哪儿网App 第五章笔记 下

    1. 多个元素或组件的过渡 多个元素的过渡: <style> .v-enter,.v-leace-to{ opacity: 0; } .v-enter-active,.v-leave-ac ...

  2. Vue2.5开发去哪儿网App 第四章笔记 下

    1.解决非父子组件之间的传值问题 非父子组件传值(Bus/总线/发布订阅模式/观察者模式) 给 Vue类上挂在一个属性,然后创建vue实例时,实例就拥有了这个属性 Vue.prototype.bus ...

  3. Vue2.5开发去哪儿网App 第三章笔记 上

    1.  vue 生命周期函数 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 ...

  4. Vue2.5开发去哪儿网App 第五章笔记 上

    1.css动画原理 .fade-enter{ opacity: 0; } .fade-enter-active{ transition: opacity 2s; } .fade-leave-to{ o ...

  5. Vue2.5开发去哪儿网App 第四章笔记 上

    一 .  组件细节知识点 1.  解决组件在h5中编码规范 例如 : table , ul , ol  等等 <table> <tbody> <row></r ...

  6. Vue2.5 开发去哪儿网App

    Vue2.5开发去哪儿网App 技术栈和主要框架

  7. Vue2.5开发去哪儿网App 首页开发

    主页划 5 个组件,即 header  icon  swiper recommend weekend 一. header区域开发 1. 安装 stylus npm install stylus --s ...

  8. Vue2.5开发去哪儿网App 城市列表开发之 Vuex实现数据共享及高级使用

    一,数据共享 1.  安装: npm install vuex --save 2. 在src目录下 新建state文件夹,新建index.js文件 3. 创建一个 store import Vue f ...

  9. Vue2.5开发去哪儿网App 从零基础入门到实战项目

    第1章 课程介绍本章主要介绍课程的知识大纲,学习前提,讲授方式及预期收获. 1-1 课程简介 试看第2章 Vue 起步本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基 ...

随机推荐

  1. 2018.10.30 NOIP模拟 字胡串(单调栈+容斥)

    传送门 对于每个点,用单调栈求出它左右第一个比他大的位置. 然后对每个点O(logai)O(log_{a_i})O(logai​​)求出第一个拥有跟它不同二进制位的位置. 然后容斥一下就行了. 代码

  2. 安卓逆向学习---初始APK、Dalvik字节码以及Smali

    参考链接:https://www.52pojie.cn/thread-395689-1-1.html res目录下资源文件在编译时会自动生成索引文件(R.java ), asset目录下的资源文件无需 ...

  3. C++中string的使用

    概述 这篇博文为了记录C++中string的使用,用到一点补充一点. 预备 使用string之前需要包含头文件 #include<iostream> #include<string& ...

  4. 第25章:MongoDB-文档存储[理解]

    ① 将文档插入到MongoDB的时候,文档是按照插入的顺序,依次在磁盘上相邻保存 因此,一个文档变大了,原来的位置要是放不下这个文档了,就需要把这个文档移动到集合的另外一个位置,通常是最后,能放下这个 ...

  5. Arria10中的OCT功能

    OCT是什么? 串行(RS)和并行(RT) OCT 提供了 I/O 阻抗匹配和匹配性能.OCT 维持信号质量,节省电路板空 间,并降低外部组件成本. Arria 10 器件支持所有 FPGA 和 HP ...

  6. keepalive主从上同时出现VIP,且均无法消失

    低版本bug 双主架构中,keepalived日志出现: more /var/log/messageOct 9 03:16:22 mysql-dzg-60-148 Keepalived_vrrp[85 ...

  7. Ajax地域选择demo

    index.jsp只用于转发到Servlet获得省份数据再转发到province.jsp index.jsp <%@ page language="java" content ...

  8. 查看Redis集群所有节点内存工具

    指定集群中任意一个节点,查看集群中所有节点当前已用物理内存.配置的最大物理内存和系统物理内存. ​ ​源码(可从https://github.com/eyjian/redis-tools下载): #! ...

  9. leetcode - [1]Reverse Words in a String

    Question: Reverse Words in a String Given an input string, reverse the string word by word. For exam ...

  10. _技巧_SublimeText_打开文件乱码解决

    macOS属于Unix分支,默认使用UTF-8编码,当从Window 或者其他Linux 或 Unix系统 拷贝文件过来,由于Window系统使用GBK或者GB2312中文编码,所以会出现乱码现象. ...