vus.js基础2
mustache 语法中是支持写js的
用法:
内容: 必须加 {{ js语法 }}
属性: 属性中属性值可以直接写js语法,并且属性值中的数据相当于全局变量
给一个标签加一个自定义属性/已有属性
img中的src就是已有属性
<img src = "" />
//data-index就是自定义属性 , web网页中建议我们使用data-形式来定义自定义属性
<img data-index = "0" />
思考: Vue现在想要在html中使用自己的属性,并且要和他的语法和数据结合?
咋整?
分析: 如何我能够标识出哪一个属性是具有vue标志的那就好了,也就是属性前加 v
<div v-html = "msg">
</div>
研究它js的支持性
总结;
指令的目的是做什么: 操作DOM
? 解释 : MVVM vm -> v 数据驱动
? 所以: 今天开始,我们不想二阶段一样操作dom,改成操作数据,数据要想操控DOM,那么我们需要依赖指令,因为指令是直接绑定在dom身上的
v-html 转义输出,也就是可以解析 xml 数据
v-text: 非转义输出,也就是无法解析 xml 类型数据
v-bind
将数据和属性进行单向数据绑定: 将vue中数据赋值给属性值
<img v-bind:src = "src" />
<div v-bind:class = "">
</div>
<div v-bind:style = "">
</div>
简写形式
<img v-bind:src="src" alt="">
<img :src="src" alt="">
类名绑定
用法
对象形式用法
<p :class = "{ bg: true,size: true }"></p>
<p :class = "{ bg: true,size: false }"></p>
<p :class = "{ [classA]: true,[classB]: true }"></p>
数组形式用法
<p :class = "[ ‘size‘,‘bg‘ ]"></p>
<p :class = "[ classA,classB ]"></p>
<p :class = "[ classA,classB,5>3?‘a‘:‘b‘]"> </p>
样式绑定
用法
对象形式用法
<p :style = "{width: ‘100px‘,height: ‘100px‘,background: ‘yellow‘}"></p>
<p :style = "styleObj"></p>
数组形式用法
<p :style = "[{width:‘100px‘,height: ‘100px‘},{ background: ‘green‘}]"></p>
<p :style = "[size,bg]"></p>
v-if
v-else-if
v-else
v-show 条件展示
<h3> 条件渲染 - 单路分支 </h3>
<p v-if = "flag"> A </p>
<h3> 条件渲染 - 双路分支 </h3>
<p v-if = "flag"> A </p>
<p v-else > B </p>
<h3> 条件渲染 - 多路分支 </h3>
<p v-if = "type === ‘美食‘"> 美食 </p>
<p v-else-if = " type === ‘游戏‘ "> 游戏 </p>
<p v-else> 睡觉 </p>
<h3> 条件展示 </h3>
<p v-show = " showFlag "> 条件展示 </p>
思考总结
思考: v-if vs v-show
1. 效果看起来一样
2. why Vue要出两个相似的指令?
v-if控制的是元素的存在与否
v-show控制的是元素的display:none属性
思考? 如果出事条件为假时? v-if v-show 谁的性能损耗较高?
v-show
总结: 项目中如何选择哪一个?
频繁切换用 v-show
如果不是很频繁的切换,那我们用 v-if
v-for 指令
<h3> 数组 </h3>
<ul>
<li v-for = "(item,index) in arr" :key = " index ">
{{ item }} -- index{{ index }}
</li>
</ul>
<h3> 对象 </h3>
<ul>
<li v-for = "(item,key,index) of obj" :key = "index">
{{ item }} -- {{ key }} -- {{ index }}
</li>
</ul>
<h3> json </h3>
<ul>
<li v-for = "item in json" :key = "item.id">
<span> 商品名称: {{ item.shop_name }} </span>
<span> 商品价格: {{ item.price }} </span>
</li>
</ul>
<h3> 循环嵌套 </h3>
<ul>
<li v-for = "item in lists" :key = "item.id">
<h3> 商品类型: {{ item.shop_name }} </h3>
<ul>
<li v-for = "item in item.type" :key = "item.id">
<p> 制造商: {{ item.maker }} </p>
</li>
<!-- <li v-for = "ele in item.type" :key = "ele.id">
<p> 制造商: {{ ele.maker }} </p>
</li> -->
</ul>
</li>
</ul>
<h3> 循环number / string </h3>
<p v-for = "item in 10"> {{ item }} </p>
<p v-for = "item in ‘abc‘"> {{ item }} </p>
总结:
简写
<button v-on:click = ‘fn‘> 点击 </button>
<button @click = ‘fn‘> 点击 </button>
<button @click = "eventHandler"> 事件对象 </button>
<button @click = "argumentHandler( a,b,$event )"> 事件参数 </button>
//当一个事件处理程序中有多个参数,其中一个参数是事件对象式,我们在调用这个方法时,要添加一个实际参数 $event 与之对应
new Vue({
el: ‘#app‘,
data: {
a: 10,
b: 20
},
methods: {
// methods称之为方法 ,里面存储是事件处理程序
fn () {
alert(‘事件‘)
},
eventHandler ( e ) {
console.log( e )
},
argumentHandler ( a,b,e ) {
console.log( e )
console.log( a + b )
}
}
})
例:html
<div id="app">
<h3> 键盘修饰符 </h3>
<input type="text" @keyUp.13="getValue">
<input type="text" @keyUp.enter="getValue">
</div>
Vue.config.keyCodes.f1 = 112
new Vue({
el: ‘#app‘,
methods: {
getValue(e) {
// if ( e.keyCode === 13 ) {
// console.log(‘执行了‘)
// }
console.log(‘执行了‘)
}
}
})
原文:https://www.cnblogs.com/zwj-lcx/p/11390587.html