vue-学习知识点总结(一)
知识点1:
element里面的trigger: 'blur'和trigger: 'change'有什么区别?答:触发方式:blur失去焦点,change数据改变
知识点2:
ref属性是什么?答:ref用于在vue中操作dom元素
ref='test'
this.$refs.test.dom操作
或
this.$refs['test'].dom操作
知识点3:
solt是什么?答:元素槽,组件下嵌套元素
知识点4:
数据绑定变量+字符串?
答:绑定数据可以这么写`` 字符串拼接变量:ref="`inputEditName` + row.id"
知识点5:
Vue中的el,称之为挂载点。原理来自于:MVC架构中,使用一个标签当做容器包住一些标签,使得标签被重新渲染,同时保留一些必要的属性。
var app = new Vue({
// el:"#app", //对应的 id选择器
// el:".app", //对应的 class选择器
// el:"div", //对应的 html类型
el:"#body",
data:{
message:"hell!"
}
})
知识点6:
mounted是什么?答:mounted是vue中的一个钩子函数。
在vue生命周期中created后,beforeMount后,beforeUpdate之前执行。
挂载完成,也就是模板中的HTML渲染到HTML页面中,此时一般可以做一些ajax操作,mounted只会执行一次。
知识点7:
谷歌浏览器console不见了?答:此时只需要按下键盘的esc键就可以啦
知识点8:
修改prop数据妥帖的方案是,使用变量储存prop的初始值,并使用watch来观察prop的值的变化。发生变化时,更新变量的值
props:['childMsg'],
data(){
return{
temp:this.childMsg
}
},
watch:{
childMsg(){
this.temp = this.childMsg
}
}
知识点9:
el-dialog嵌套子组件时,子组件回传数据到父组件,需要使用 @xxx="xxx",xxx为子组件$emit传的事件名称<el-dialog :visible.sync="dialogUpload" style="text-align: center">
<upload-qiniu :image-url="dialogUploadImageUrl" :show-img="showImg" @uploadComplete="uploadComplete" />
知识点10:
watch用法,handler方法,immediate属性,deep属性当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行handler方法,此时就需要将immediate设为true。
immediate:true代表如果在 wacth 里声明了 viewDetials之后,就会立即先去执行里面的handler方法,如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行。
watch里面还有一个属性deep,默认值是false,代表是否深度监听当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。
watch: {
showImg: {
deep: true,
immediate: true,
handler(val) {
console.log(val)
}
}
}
知识点11:
什么是Vue.nextTick()?答:$nextTick
mounted() {
this.$nextTick(() => {
const self = this
let pageHeight = 0
self.tableHeight = window.innerHeight - self.$refs.tableList.$el.offsetTop - 64 - 200 - pageHeight
// 监听窗口大小变化
window.onresize = function() {
if (self.total > self.listQuery.limit) {
pageHeight = 56
}
self.tableHeight = window.innerHeight - self.$refs.tableList.$el.offsetTop - 64 - 200 - pageHeight
}
})
},
定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码;
理解:nextTick(),是将回调函数延迟在下一次dom更新数据后调用,简单的理解是:当数据更新了,在dom中渲染后,自动执行该函数。
什么时候需要用的Vue.nextTick()?
1、Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。
原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,
所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。
与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载已完成。
2、当项目中你想在改变DOM元素的数据后基于新的dom做点什么,对新DOM一系列的js操作都需要放进Vue.nextTick()的回调函数中;
通俗的理解是:更改数据后当你想立即使用js操作新的视图的时候需要使用它
3、在使用某个第三方插件时 ,希望在vue生成的某些dom动态发生变化时重新应用该插件,也会用到该方法,这时候就需要在 $nextTick 的回调函数中执行重新应用插件的方法。
Vue.nextTick(callback) 使用原理:
原因是,Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。
如果这个watcher被触发多次,只会被推送到队列一次。
这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。
而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。