LoginSignup
1
1

More than 3 years have passed since last update.

Vueのwatchで自分自身の状態を変更したときに変な動き

Last updated at Posted at 2020-05-01

Vue 2.6.11 で確認

v-modelでバインドした変数を監視したとき、
つまり

<div id="app">
  <div>
    <input type="checkbox" v-model="check" />オンにならないはず
  </div>
  <div>{{ getString(check) }}</div>
</div>

こんなんがあって、

new Vue({
  el: "#app",
  data: {
    check: false,
  },
  methods: {
    getString: function(target) {
      return JSON.stringify(target);
    },
  },
  watch: {
    check: function(){
      if (this.check) {
        this.check = false;
      }
    }
  }
});

チェックボックスオンにするけど、watchで監視して、trueになったらfalseにするようにしているので、想定では、このチェックボックスはオンになることはない

が、

変数checkはfalseにはなるが、画面上の表示はチェックボックスがオンとなる

困った

のでこうした

  watch: {
    check: function(){
      if (this.check) {
        setTimeout(() => {this.check = false}, 0);
      }
    }
  }

この動き、Vue 2.2.1では、setTimeoutかまさなくても、チェックボックスオフとなった。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1