data: function () {
return {
firstName: ‘leo’,
lastName: ‘gao’,
greet: ‘Hello World’
}
}
})
// 创建 Greet 实例,并挂载到一个元素上。
new Greet().$mount(‘#app’)
结果如下:
leo gao Hello World
Vue.nextTick([callback,context])
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
虽然 Vue.js 通常鼓励开发人员使用“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们必须要这么做。为了在数据变化之后等待 Vue 完成更新 DOM,可以在数据变化之后立即使用 Vue.nextTick(callback)
。这样回调函数将在 DOM 更新完成后被调用。
var vm = new Vue({
el: ‘#app’,
data: {
message: ‘123’
}
})
vm.message = ‘new message’ // 更改数据
console.log(‘未使用nextTick打印:’,vm.$el.textContent)
Vue.nextTick(function () {
console.log(‘使用nextTick后打印:’,vm.$el.textContent)
})
当我们改变message之后,分别打印未使用与使用nextTick()的结果
使用nextTick之后我们获取到了渲染之后的已改变节点信息,说明其是在下次 DOM 更新渲染结束之后执行延迟回调。正式项目中直接使用this.$nextTick()来达到同样的效果。该方法我常用来在渲染页面结束之后,改变页面某部分的样式,达到自己想要的效果且不影响其他样式渲染。
Vue.set(target,propertyName/index,value)
向响应式对象中添加一个 property,并确保这个新 property 同样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新 property,因为 Vue 无法探测普通的新增 property (比如 this.myObject.newProperty = 'hi'
)。
举个简单例子:
data() {
return {
list: [
‘leo’,
‘gao’
]
};
}
{{item}}
mounted(){
console.log(this.list,‘list’)
}
页面效果及打印信息如下:
现在,我们执行一个setTimeout方法,为list添加一个新的元素:
mounted(){
setTimeout(()=>{
this.list.push(‘lion’)
})
console.log(this.list,‘添加元素后 list’)
}
页面效果及打印信息如下:
list(数组)中使用push(在vue中被重写)添加的元素是具有响应性的,我们试着换另外一种方式(list[index] = “xxx”):
mounted(){
setTimeout(()=>{
this.list[2] = ‘lion’
})
console.log(this.list,‘添加元素后—list’)
}
页面效果及打印信息如下:
这时候虽然打印中数组发生变化,但是页面的显示却没变化,并没有多出“lion”,因为通过list[index]的方式添加的元素并不会劫持到其set与get方法,即未存在双向数据绑定,新元素不具有响应性。
往数组添加元素,且元素也具有响应性,除了使用push,还可以使用Vue.set():
mounted(){
setTimeout(()=>{
this.$set(this.list,2,‘lion’)
})
console.log(this.list,‘Vue.set()添加元素后—list’)
}
此时页面效果为:
当然,除了数组之外,当某个对象需要添加属性的时候,如直接使用obj.propertyName = “xxx”,则新加的属性也不具有响应性,需要使用this.$set(obj,propertyName,“xxx”)的方式新增属性。
data() {
return {
obj: {
name:‘leo’,
age:18
}
}
}
{{obj.name}} {{obj.age}} {{obj.like}}
在mounted阶段添加一个新属性“like” :
mounted(){
setTimeout(()=>{
this.obj.like = ‘read’
})
console.log(this.obj,‘添加属性后—obj’)
}
页面效果及打印信息如下:
验证使用obj.propertyName = "xxx"的方式添加的属性不具有响应性,同样的,可以使用this.$set(obj,propertyName,“xxx”)的方式使其具有响应性:
setTimeout(()=>{
this.$set(this.obj,‘like’,‘read’)
})
页面效果及打印信息如下:
注意观察,页面正常显示,对象新增了“like”属性跟相应的get、set方法,使其具有响应性。
注意:对象不能是 Vue 实例,或者 Vue 实例的根数据对象。
Vue.delete(target,propertyName/index)
删除对象的 property。如果对象是响应式的,确保删除能触发更新视图。这个方法主要用于避开 Vue 不能检测到 property 被删除的限制,但是你应该很少会使用它。有点像是Vue.set()的逆向操作。
如上例,我们想要删除obj对象的“like”属性:
data() {
return {
obj: {
name:‘leo’,
age:18,
like:‘read’
}
}
}
删除某个对象的属性我们使用delete obj.propertyName:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
点击这里领取Web前端开发经典面试题
个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
点击这里领取Web前端开发经典面试题