vue中当数据改变时更新DOM
2024-10-20 20:53:16
具体场景:
当vue中使用swiper, better-scroll时候,我们需要去new Swiper,new [better-scroll]来获取实例,通常我们页面的数据都是异步获取的,
会导致我们创建Swiper或者better-scroll实例时,数据还没有更新,DOM也没更新,会造成我们不想要的效果.
所以我们需要在 数据更新之后,DOM也更新了,然后再创建我们的Swiper,better-scroll
解决方案
- 使用watch + $nextTick
watch监听数据的变化,$nextTick下次DOM更新循环之后来调用,当数据修改之后立即调用它,然后等待DOM更新 - 使用callback(回调函数)
一般获取数据都是在vuex中的action中调用ajax异步获取的,所以我们可以在分发action的时候传给action回调函数.
当action中获取到数据并且提交mutation之后,调用回调函数
action中getGoods({commit}, callback){
// 异步获取数据
getGoods().then(result => {
if(result.code === 0){
commit('[mutation]', {goods: result.data});
// 当数据更新之后,通知数据更新了
// 如果传过来callback就调用,否则不调用
callback && callback();
}
});
},
vue实例中
// 分发action
this.$store.dispatch('getGoods', () => {
this.$nextTick(() => {
// $nextTick回调里面的this自动绑定到调用$nextTick的实例上
// 要在数据更新之后,列表显示后,创建想要的对象
// 例如swiper或者better-scroll
});
});
最新文章
- css3的动画特性
- 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。
- IPC-->;PIPO
- Android编程: 调试方法
- 【socket】TCP 和 UDP 在socket编程中的区别
- 七周七语言——Prolog(二)
- Cocos2d粒子系统二
- hdu 5605 geometry(几何,数学)
- STL内存管理器的分配策略
- ElasticSearch(7)-排序
- (译)Windsor入门教程---第五部分 添加日志功能
- YYHS-怎样更有力气
- python每日学习2018/1/11
- Java EE的未来
- CKEditor、UBB编辑器的使用总结
- oc语言的Foundation框架(学习笔记2)
- ubuntu下Qt链接MySQL: QMYSQL driver not loaded(不用重新编译源码)
- ASP.NET MVC 4 中的JSON数据交互
- C++:同名隐藏和赋值兼容规则
- nvm-windows的安装配置