LoginSignup
1
1

More than 1 year has passed since last update.

Vue.js 入門(第2回) - 算出プロパティ(computed)と監視(watch) -

Last updated at Posted at 2022-01-19

はじめに

Vue.jsに少し触れてみたので、その内容を「Vue.js入門」として、数回にわけて書いていこうと思います。
今回の2回目では「算出プロパティ(computed)」と「監視(watch)」を紹介します。
1回目は「Vue.js 入門(第1回) - Vue.jsでHello World と双方向データバインディング(v-model) -」を参照してください。

※ここではVue.jsの2.x系(2.6.14)を使用しています。3.x系では書き方が異なるので注意してください。

1. 算出プロパティ(computed)

算出プロパティとは、あるデータや別の算出プロパティから算出される新たなデータのことです。
computedオプションを指定することで、算出プロパティを定義することができます。
インスタンスのデータが更新されると、それに依存している算出プロパティも更新されます。

1.1. jsの作成

js/main.js
var vm = new Vue({
  el: '#app',
  data: {
    firstName: 'yasushi',
    lastName: 'jp'
  },
    computed: {             // (1)
    getName: function() {   // (2)
      return this.firstName + ' ' + this.lastName;
    }
  }
});

(1)computedで算出プロパティを定義します。
(2)算出プロパティの名称をgetNameとして、getNameが返す値をfunction内に定義します。ここではデータ:firstNameとデータ:lastNameをスペースを付けて連結した値を返します。
 

1.2. HTMLの作成

index.html
<!DOCTYPE html>
<html lang="jp">
  <head>
    <meta charset="utf-8">
    <title>Vue.js(computed)</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
  </head>
  <body>
    <div id="app">
      <p>Vue.jsのバージョンは {{ Vue.version }} です。</p>
      <p>firstName: <input type="text" v-model="firstName"></p> <!-- (1) -->
      <p>lastName: <input type="text" v-model="lastName"></p>   <!-- (2) -->
      <p>Name: {{ getName }}</p>  <!-- (3) -->
    </div>
    <script src="js/main.js"></script>
  </body>
</html>

(1)の入力値をfirstNameと紐付けます。
(2)の入力値をlastNameと紐付けます。
(3)でmain.jsの算出プロパティで定義したgetNameを表示します。

1.3. 動作確認

ブラウザでindex.htmlを開くと以下の通り表示されます。
firstNamelastNameに入力すると、NamefirstNamelastNameを連結した値が表示されます。
1-1.png

2. 監視(watch)

watchオプションを指定することで、データや算出プロパティの変更を監視することができます。
オプションのキーに変更を監視したいプロパティ名を設定すると、そのプロパティ名の値が更新された際に関数が実行されます。
実行される関数の第1引数に変更後の値、第2引数に変更前の値が渡されます。

2.1. jsの作成

js/main.js
var vm = new Vue({
  el: '#app',
  data: {
    firstName: 'yasushi',
    lastName: 'jp',
    oldName: '',  // (1)
    newName: ''   // (2)
  },
    computed: {
    getName: function() {
      return this.firstName + ' ' + this.lastName;
    }
  },
  watch: {    // (3)
    getName: function(newVal, oldVal) {   // (4)
      this.oldName = oldVal;    // (5)
      this.newName = newVal;    // (6)
    }
  }
});

(1)(2)データにoldNamenewNameのプロパティ名を定義します。
(3)watchを指定します。
(4)算出プロパティのgetNameを監視します。第1次引数のnewValには変更後のgetNameの値が、第2引数のoldValには変更前のgetNameの値が渡されます。
(5)oldNameに変更前の値を設定します。
(6)newNameに変更後の値を設定します。

2.2. HTMLの作成

index.html
<!DOCTYPE html>
<html lang="jp">
  <head>
    <meta charset="utf-8">
    <title>Vue.js(computed)</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
  </head>
  <body>
    <div id="app">
      <p>Vue.jsのバージョンは {{ Vue.version }} です。</p>
      <p>firstName: <input type="text" v-model="firstName"></p>
      <p>lastName: <input type="text" v-model="lastName"></p>
      <p>Name: {{ getName }}</p>      <!-- (1) -->
      <p>Name(old): {{ oldName }}</p> <!-- (2) -->
      <p>Name(new): {{ newName }}</p> <!-- (3) -->
    </div>
    <script src="js/main.js"></script>
  </body>
</html>

(1)算出プロパティgetNameを表示します。getNameの値は入力項目の「firstName」と「lastName」をスペースを付けて連結した値となります。
(2)変更前の値のoldNameを表示します。
(3)変更後の値のnewNameを表示します。

2.3. 動作確認

ブラウザでindex.htmlを開くと以下の通り表示されます。
入力項目の「firstName」と「lastName」を変更すると、「Name」の値が変更され、変更前の「Name」(Name(old))と変更後の「Name」(Name(new))が表示されます。

1-2.png

参考

リンク

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