首页 前端知识 Vue 全局API 详细介绍(nextTick、set、delete、,html5移动web开发指南

Vue 全局API 详细介绍(nextTick、set、delete、,html5移动web开发指南

2024-05-19 09:05:59 前端知识 前端哥 646 157 我要收藏

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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

点击这里领取Web前端开发经典面试题

个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后:

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。

面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。

点击这里领取Web前端开发经典面试题

转载请注明出处或者链接地址:https://www.qianduange.cn//article/8906.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!