vue.js - 列表离开动画和 DOM 更新后的回调 - VueJS
问题描述
要在 Vue 更新 DOM 后做某事,您可以使用$nextTick
绑定。
要在 css 转换完成后做某事,你可以使用transitionend
event.
我有一个动态列表,其中通过用户操作添加和删除内容。移除后,会有一个 CSS 动画,然后我需要在元素消失后立即检查 DOM 的状态。
我在想,在列表项被删除$nextTick
后transitionend
, DOM 的状态将是 DOM 的状态,但事实并非如此。
在过渡结束并且列表中的元素已从 DOM 中删除后,我需要做一些事情。
现在我有:
<transition-group class="message-bus" tag="ul" name="message-bus">
<li v-for="message in messages" v-bind:key="message.id" :ref="message.id">
<div>{{message.text}}</div>
<a class="dismiss-message" @click="dismissMessage(message)">×</a>
</li>
</transition-group>
dismissMessage(message){
const vm = this;
this.$refs[message.id][0].addEventListener("transitionend", function(){
vm.$nextTick(function(){
//This is called, but appears to be called before the element is actually removed from the DOM
//I need to query the DOM immediately after this element is removed
});
});
this.messages.splice(this.messages.indexOf(message), 1);
}
解决方案
也许您可以使用自定义指令。unbind
在钩子内执行您需要的操作..
created() {
this.vm = this
},
directives: {
foo: {
unbind(el, binding) {
// Here you can perform the actions you need.
// You can access the Vue instance using binding.value (eg: binding.value.$el)
}
}
},
在你的模板中..
<transition-group class="message-bus" tag="ul" name="message-bus">
<li v-for="message in messages" v-bind:key="message.id" :ref="message.id" v-foo="vm">
<div>{{message.text}}</div>
<a class="dismiss-message" @click="dismissMessage(message)">×</a>
</li>
</transition-group>
推荐阅读
- c# - 使用代理检查互联网连接状态
- java - 使用 excel .xls,是否有其他方法可以执行以下操作?
- c# - Windows 服务不会等待正在运行的任务完成
- c# - 获取 SBObject 实例的真实类型
- c - c - fread 后以 hexa 格式打印文件
- kotlin - KoinTest 类中的 startKoin 抛出“A KoinContext 已启动”
- python-3.x - 以递归方式将字符串中的 'pi' 替换为 '3.14' [未通过测试用例]
- javascript - 如何使用 API 中的数据从日期选择器中获取价值
- php - 循环通过一个 php 数组 => 奇怪
- angularjs - 我如何在 ionic 1 项目中导入 Howler