算出プロパティ

算出プロパティcomputedとは

算出プロパティは、関数によって算出したデータを返すことができるプロパティです。

 

 

基本の使い方

computedを使うと、マスタッシュ構文の中でメソッドを続けて書いた時と同じように、

messageの文字列を反転させて表示することができます。

index.html

<div id="app">
    <p>
        {{message.split('').reverse().join('')}}
    </p>
    <p>
        {{reversedMessage}}
    </p>
</div> 

 

index.js

var app = new Vue({
    el: '#app',
    data:{
        message: 'Hello Vue.js!!'
    },
    computed: {
        reversedMessage: function(){
            return this.message.split('').reverse().join('')
        }
    }
})

 

ブラウザ

gyazo.com

 

 

 

computedとmethodsの比較

・computedはメソッドでなくプロパティなので、( ) をつける必要はありません。methodsはメソッドなので、( ) をつける必要があります。

・computesはgetter、setterを定義することができますが、methodsはgetterのみです。

・computedはキャッシュされますが、methodsはされません。

 

 

 

 

getterとsetter

computedでは、getterだけではなく、setterも定義することができます。

 

index.thml

<div id="app">
    <p>
        税抜き価格:<input type="text" v-model="basePrice">
    </p>
    <p>
        税込価格:<input type="text" v-model="taxIncludedPrice">
    </p>
</div>

 

index.js

var app = new Vue({
    el: '#app',
    data: {
        basePrice: 100
    },
    computed: {
        taxIncludedPrice: {
            get: function() {
                return parseInt(this.basePrice*1.08)
            },
            set: function(taxIncludedPrice) {
                this.basePrice = Math.ceil(taxIncludedPrice/1.08)
            }
        }
    }
})

 

ブラウザ

Image from Gyazo

 

 アプリ 

hayashiyoshino.github.io

 

 

キャッシュ

computedに関しては、プロパティは依存関係に基づきキャッシュされます。

 

index.html

<div id="app">
    <h2>
        Computed
    </h2>
    <ol>
        <li>{{computedNumber}}</li>
        <li>{{computedNumber}}</li>
        <li>{{computedNumber}}</li>
    </ol>
    <h2>
        Methods
    </h2>
    <ol>
        <li>{{methodsNumber()}}</li>
        <li>{{methodsNumber()}}</li>
        <li>{{methodsNumber()}}</li>
    </ol>
</div>

 

index.js

var app = new Vue({
    el: '#app',
    computed: {
        computedNumber: function(){
            return Math.random()
        }
    },
    methods: {
        methodsNumber: function() {
            return Math.random()
        }
    }
})

 

ブラウザ

gyazo.com