vue绑定语法和指令

声明式渲染 绑定语法

{{}}  双花括号
1. 先找页面中所有可能发生变化的地方有几处
2. 再在模型数据中定义相同数量的变量:
强调: HTML中有几处变化,data对象中就要有几个变量与之对应。

能写:变量, 算术计算,关系/逻辑运算,函数调用, 访问数组元素, 三目——凡是有返回值的js表达式都能
不能: if  else   while    for——都是程序结构,没有返回值!
结果: 运行时,HTML中的所有{{}}会自动去data中找同名的变量使用。
且内存中的data中的变量值发生变化,HTML中的{{}}的值自动变化!
用户最终看到的是{{}}中的变量或者表达式计算后的值!而看不见双
花括号——节省了大量重复的查找和修改操作。
——多亏了MVVM中的ViewModel中的两大子系统: 响应系统和虚拟DOM树。

指令
绑定属性 v-bind 动态绑定元素的属性值

 <img v-bind:src="pm25<100?'img/01.jpeg':
                         pm25<200?'img/02.jpeg':
                         pm25<300?'img/03.jpg':
                         'img/04.jpeg'">

控制元素的显示隐藏

1. 控制一个元素的显示隐藏: 
	<ANY v-show="判断条件"
	只要条件满足,就显示元素
    一旦条件不再满足,就隐藏元素!
2. 控制多个元素,多选一显示:
    <ANY v-if="判断条件" 单用时
	v-if从现象上看,和v-show是完全一样的
	但是原理不一样
    鄙视:  v-show vs v-if的差别: 
          v-show 用display:none 控制显示隐藏
          v-if 用删除节点的方式,控制显示隐藏
    如果一个元素频繁需要显示隐藏,v-show的效率高!
    和v-else-if   v-else 配合使用:
            <元素1 v-if="条件1"
            <元素2 v-else-if="条件2"
                ...  ...
            <元素n v-else 
    强调: v-if和v-else-if和v-else之间禁止插入一切其他元素。必须连续写!
 	原理: Vue会自动判断每个条件:
		哪个条件符合,就只显示哪个条件的元素。其余元素都不显示。
		如果前一个条件已经满足,则后续判断都不再执行。所以,不可能同时显示多个元素。如果所有条件都不满足,会显示v-else的元素

根据数组反复生成多个相同结构的HTML元素

其实就是为html添加循环功能
如何: 
	1. data中必须先定义一个可遍历的数组
	2.HTML中使用v-for遍历数组,反复生成多个相同结构的元素,并动态绑定元素的内容。
语法: 
	<要反复生成的元素 v-for="(elem,i) of 数组" :key="i"
	强调: 特例: v-for中的循环变量可被v-for自己或子元素用于绑定!
	 <ul>
        <li v-for="todo in todos">
          {{todo.text}}
        </li>
     </ul>
     
     <ul>
        <li v-for="(elem,i) of arr" :key="i">
            {{elem.text}}---{{i}}
        </li>
     </ul>
        <!-- 
            吃饭---0
            睡觉---1
         -->

事件绑定 v-on:click 可以简写为 @事件名=处理函数

<p style="color: green;">{{msg}}</p>
<button v-on:click="re">翻转文字</button>

var data={
       msg:'我不喜欢你了',
 };

new Vue({
  el:'#app',
  data,
  methods:{
    re(){this.msg=this.msg.split('').reverse().join('');}
  }                
 })

5. 避免用户短暂看到{{}}

问题: 如果new Vue加载慢,则可能短暂看到{{}}
解决: v-cloak 可让元素在new Vue加载之前暂时隐藏。
当new Vue加载完成后,会自动查找页面中的所有v-cloak斗篷删除该属性,
让元素显示出来。
强调: v-cloak没有属性值!
问题: v-cloak空有属性名,没有配套的样式
解决: 只能自己手写!用属性选择器:
[v-cloak]{display:none}
强调: v-cloak不能改名!改名了,vue就找不到了!
其实,除了v-cloak外,还可用v-text代替{{}}绑定元素内容,避免短暂看到{{}}
如何: 
	<ANY v-text="`js模板字符串语法,用${变量}动态生成内容`"
		比如: 
			<h1 v-text="`姓名: ${uname}`"></h1>
  			<h2 v-text="`性别: ${sex==1?'男':'女'}`"></h2>
原理: v-text在未绑定时,是一个浏览器不认识的属性,所以,显示不出来。直到new Vue加载完,认出v-text,才用V-text的内容代替元素的innerHTML内容。
v-cloak vs v-text: 
v-cloak: 需要额外添加css样式,且需要选择放在哪个元素上,隐藏什么范围内的元素。整个网页都隐藏,用户体验还是不好的。
v-text: 仅对当前元素有效,不会影响其它元素的显示不显示。用户体验比v-cloak要好。但是使用反引号的语法,很晦涩。


绑定HTML片段

问题: 使用{{}}绑定HTML片段,VUE不会解析HTML片段为网页内容。而是原样显示HTML代码
解决: 今后,只要绑定一段HTML片段,必须用v-html。
如何: <ANY v-html="变量"></ANY>

只在页面加载之初,绑定一次。之后及时数据变化,也不反复更改页面:v-once

强调: v-once没有任何属性值,写在元素中,就起作用
原理: 
	在构建虚拟DOM树时,会扫描到v-once的元素,所以首次绑定,能绑定v-once的元素的内容。
	首次绑定后,v-once的元素会从虚拟DOM树中移除。从此,再出发变量改变时,不会再修改v-once的元素。

万一内容的正文中,有{{}},但是不是用于绑定的,会出错。
解决: v-pre 可阻止内容中的{{}}被编译,而是让{{}}原样显示。

总结: 
1. 如果元素内容要变化:{{变量或表达式}} 绑定
	也可用v-text="`变量或表达式`"
2. 如果元素的属性值要变化::属性名="变量或表达式" 绑定
3. 一个元素控制显示隐藏: v-show="条件"
4. 多个元素选其一显示: 
	v-if="条件"  v-else-if="条件"   v-else
5. 反复生成多个相同结构的元素时: 
	v-for="(elem, i ) of 数组" :key="i"
6. 只要绑定事件处理函数都用: @事件名="处理函数"
7. 只要不希望用户短暂看到{{}}语法:
	v-cloak 或 v-text
8. 只要绑定HTML片段: v-html
9. 只要希望只在页面加载之初绑定一次,之后不再变化,就用v-once.
10. 如果内容中包含不想被vue编译的{{}}正文,可用v-pre阻止VUE编译元素的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值