AngularJS 1.4+Selectize 3.0:onChange中如何获取旧值?传参无效
解决Selectize 3.0 onChange事件获取旧值的问题
我之前也碰到过这个困扰——Selectize的onChange默认只返回新选中的值,没法直接拿到旧值,而且onItemRemove只能覆盖移除项的场景,没法处理直接替换选中项的情况。试试下面这两种可行方案:
方案一:用闭包维护旧值
通过闭包变量保存每次变更前的值,初始化时先记录初始选中值,每次onChange触发时先读取旧值,再更新变量为新值:
// 用闭包变量保存旧值 let selectedOldValue = null; const Config = { maxItems: 1, valueField: 'name', labelField: 'name', onInitialize: function() { // 组件初始化时,获取当前值作为初始旧值 selectedOldValue = this.getValue(); }, onChange: function(newValue) { // 这里就能拿到变更前的旧值了 console.log('变更前的值:', selectedOldValue); console.log('变更后的值:', newValue); // 更新旧值为当前新值,供下次变更使用 selectedOldValue = newValue; } };
方案二:利用Selectize实例的内部状态(注意版本兼容性)
Selectize的实例对象里有个lastValue属性(部分版本可能命名为previousValue),可以直接在onChange里通过this访问:
const Config = { maxItems: 1, valueField: 'name', labelField: 'name', onChange: function(newValue) { // 通过实例获取旧值 const oldValue = this.lastValue; console.log('旧值:', oldValue); console.log('新值:', newValue); } };
为什么onItemRemove没起作用?
onItemRemove只有在用户手动移除已选中项的时候才会触发,如果是直接选择另一个项替换掉当前选中项(比如maxItems设为1的单选场景),这个事件是不会触发的,所以没法覆盖所有变更情况。
内容的提问来源于stack exchange,提问作者bigidigi89
相关产品推荐
相关产品推荐

