Просмотр исходного кода

fix(v-model): fix the lazy modifier is not reset by other modifications (#8547)

close #8546
close #6564
close #6773
远方os 2 лет назад
Родитель
Сommit
a52a02f43f
1 измененных файлов с 7 добавлено и 2 удалено
  1. 7 2
      packages/runtime-dom/src/directives/vModel.ts

+ 7 - 2
packages/runtime-dom/src/directives/vModel.ts

@@ -82,7 +82,11 @@ export const vModelText: ModelDirective<
   mounted(el, { value }) {
   mounted(el, { value }) {
     el.value = value == null ? '' : value
     el.value = value == null ? '' : value
   },
   },
-  beforeUpdate(el, { value, modifiers: { lazy, trim, number } }, vnode) {
+  beforeUpdate(
+    el,
+    { value, oldValue, modifiers: { lazy, trim, number } },
+    vnode
+  ) {
     el[assignKey] = getModelAssigner(vnode)
     el[assignKey] = getModelAssigner(vnode)
     // avoid clearing unresolved text. #2302
     // avoid clearing unresolved text. #2302
     if ((el as any).composing) return
     if ((el as any).composing) return
@@ -97,7 +101,8 @@ export const vModelText: ModelDirective<
     }
     }
 
 
     if (document.activeElement === el && el.type !== 'range') {
     if (document.activeElement === el && el.type !== 'range') {
-      if (lazy) {
+      // #8546
+      if (lazy && value === oldValue) {
         return
         return
       }
       }
       if (trim && el.value.trim() === newValue) {
       if (trim && el.value.trim() === newValue) {