vue-day2
绑定class样式
:class="" (v-bind的缩写)
修改vue维护的数据,而非直接操作dom

绑定style,内联样式,交给vue管理(要对象,或者数组)
font-size -> fontSize 换位驼峰


⭐⭐⭐vue条件渲染
v-show 底层 -> 调整style行内样式, display:none
v-if dom节点都没了,彻底没了,没这个结构

选择:切换频率高,建议用v-show


template 最终渲染出来会被脱掉,注意:template只能配合v-if,不能配合v-show
好处:不用多写个div包裹<h2>破坏结构



⭐⭐⭐列表渲染
唯一标识也可以用index
in 也可以换成 of


重点是遍历数组!!!
key是vue在使用,在渲染为真实dom之后,dom上实际没有这个key
key原理讲解举例:特殊情况:


所以:数据的唯一标识最好由后端提供
列表过滤+列表排序
<div id="root">
<h2>人员列表</h2>
<input type="text" placeholder="搜索" v-model="keyWord">
<button @click="sortRule = 2">按年龄升序</button>
<button @click="sortRule = 1">按年龄降序</button>
<button @click="sortRule = 0">默认</button>
<ul>
<li v-for="(item,index) in tempArr" :key="index">
{{item.name}} - {{item.age}} - {{item.sex}}
</li>
</ul>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false
const vm = new Vue({
el: '#root',
data() {
return {
keyWord: '',
sortRule: 0, // 0 默认,1 降序, 2 升序
persons: [
{id: '001', name: '马冬梅', age: 18, sex: '女'},
{id: '002', name: '周冬雨', age: 20, sex: '女'},
{id: '003', name: '周杰伦', age: 14, sex: '男'},
{id: '004', name: '温兆伦', age: 13, sex: '男'}
]
}
},
methods: {},
// 基于计算属性实现
computed: {
tempArr() {
const arr = this.persons.filter((p) => {
return p.name.indexOf(this.keyWord) !== -1
})
if (this.sortRule) {
arr.sort((p1, p2) => {
// 简化:三元表达式
if (this.sortRule === 1) {
return p2.age - p1.age
} else {
return p1.age - p2.age
}
})
}
return arr
}
}
})
</script>

computed执行条件,computed里面所使用到的变量一旦发生变化,则computed会重新执行
⭐⭐⭐更新时的问题
vue检测数据的原理_对象
依赖于get set
两个api:
Vue.set(target,key,val) - 新增属性 - (三个参数)
vm.$set(vm._data.student, 'sex', '女') - 效果同上
Vue检测数组数据
不靠get set
数组有几个方法会影响原数组,当Vue发现调用了某个对应的数组方法改变数组时,就承认有修改
并重新解析模板




总结:

特殊:filter:数组api filter并未改变原数组


v-model收集表单数据:
过滤器
时间戳
开源网站
https://www.bootcdn.cn/




多个过滤器可以串联
timeFormater处理结果再传给mySlice

局部的,只有声明filters的这个vue实例可以使用
全局过滤器:声明在vue实例之前


自定义指令:
函数式:

第一个参数就是对应的真实dom元素
对象式(更全面):
对象里有三个固定的方(钩子),vue会在特定的时候去调用

注意,这样的指令是局部的,要定义为全局的,跟过滤器一样
要在声明vue之前定义出来

总结:


浙公网安备 33010602011771号