之前在wordPress的woocommerce里,对用户的订单页面,新增功能支持用户通过订单直接拉起弹窗评论产品。用了Vue框架改造增强评论弹窗,以便更好支持动态交互体验。
只有在实践过程中,通过对比jQuery和Vue,对相同的功能实现方式,才能更深切的感知两者优缺点,以便更好利用各自的优势实现用户需求。
比如弹窗评论,用户只有在需要时,才点击触发。否则直接隐藏,这需要通过css控制。
<div id="review-modal" class="review-modal dialog-panda-skip hidden">
<!-- 必须写 hidden 类的 CSS -->
.hidden {
display: none;
}
这就需要js代码控制CSS 类的增减hidden
jQuery 思路
需要先 “选中 DOM 元素”,再手动调用 addClass()/removeClass()/toggleClass() 来操作,逻辑和 DOM 强绑定。
Vue 思路
只关心「数据状态」(比如 isActive、isError、isModalShow),CSS 类的增减由 Vue 自动根据数据同步,不用管 “选哪个 DOM 元素”“怎么操作类”。
使用Vue对原弹窗的 class 进行改造
1:修改弹窗 DOM 的 class 绑定
保留固定类(review-modal dialog-panda-skip),用 :class 动态控制 hidden 类(根据 isModalShow 状态):
<!-- 原代码 -->
<div id="review-modal" class="review-modal dialog-panda-skip hidden">
<!-- 改造后:固定类保留,hidden 类通过 isModalShow 动态控制 -->
<div id="review-modal"
class="review-modal dialog-panda-skip"
:class="{ hidden: !isModalShow }">
2:在 Vue 实例中添加 isModalShow 状态
在 data 中新增控制弹窗显示的状态变量,初始值为 false(默认隐藏):
new Vue({
el: '#review-modal',
data: {
orderId: '',
orderNumber: '',
products: [],
// 新增:控制弹窗显示/隐藏的状态(默认隐藏)
isModalShow: false
},
// ...其他方法
});
3:修改打开 / 关闭弹窗的方法
删除原有的 this.$el.classList 操作,改为直接修改 isModalShow 状态:
methods: {
openModal(orderId, orderNumber, productItems) {
// 1. 清空并填充数据(原有逻辑不变)
this.orderId = orderId;
this.orderNumber = orderNumber;
this.products = [];
productItems.forEach(item => {
this.products.push({
id: item.dataset.productId,
name: item.dataset.productName,
rating: 0,
content: ''
});
});
// 2. 打开弹窗:只需修改数据状态(核心变化)
this.isModalShow = true;
},
closeModal() {
// 关闭弹窗:同样修改数据状态(核心变化)
this.isModalShow = false;
// 清空数据(可选,根据需求是否保留上次输入)
this.products = [];
}
}
当然,之前的css的hidden 类样式要保留,这样改造后,弹窗显示 / 隐藏只依赖 isModalShow 状态,无需手动操作 DOM,符合 Vue 设计理念。