已调用 Vue 指令但未更新值

Vue directive called but not updating value

我下面的 uppercase 指令与 <input> 一起工作正常:

<input
  type="text"
  v-model="foo"
  v-uppercase
>

但由于某些原因,它不适用于 <b-form-input>:

<b-form-input
  type="text"
  v-model="foo"
  v-uppercase
></b-form-input>

uppercase 指令:

  directives: {
    uppercase: {
      update: function (el) {
        el.value = el.value.toUpperCase();
      }
    }
  }

我的代码有问题吗?我该如何解决?

如果您只想更改为大写,最简单的方法是使用样式:

.uppercase{
    text-transform: uppercase;
}

也可以使用过滤器另选:

    filters: {
        uppercase: function(v) {
            return v.toUpperCase();
        }
    }

如果你想在使用 v-model 时使用指令,那么你可以将它与样式解决方案结合起来:

Vue.directive("uppercase", {
    bind(el, binding, vnode) {
        el.style.textTransform = 'uppercase';
    },
    update(el, binding, vnode) {
        el.style.textTransform = 'uppercase';
    }
});

这里是simple codepen用于显示所有解决方案的指令