15-Vueの計算プロパティ
8303 ワード
通常、ビュー構造を記述するために使用されるテンプレートに式をバインドします.テンプレート内の式に論理が多すぎると、テンプレートが肥大化し、メンテナンスが非常に困難になります.したがって、論理を簡略化するために、ある属性の値が他の属性の値に依存する場合、計算属性を使用することができます.
1.計算属性計算属性とは、属性に依存する値が変化すると、その属性の値が自動的に更新され、それに関連するDOM部分も同期して自動的に更新される
前例からvm.aとvm.bの値が変化する場合、vm.contの値は自動的に更新され、DOMセクションの前のインスタンスに同期して更新されます.getterのみが提供されています.実際にはgetterのほかに計算属性のsetterを設定することもできます.
vmを設定するとcontの値の場合vm.aとvm.bの値も自動的に更新されます
2.属性キャッシュの計算+属性メソッドの計算に多くの時間がかかる場合、パフォーマンスに影響します.たとえば、計算属性getterで大きな配列をループして多くの操作を実行すると、その計算属性を頻繁に呼び出すと、計算属性に依存する属性値が変化した場合にのみgetter+が再実行されるという問題があります.vueインスタンスで観察されたデータ属性が変更された場合にのみgetterが再実行されます.ただし、計算プロパティはリアルタイムの非観察データプロパティに依存する場合があります.
キャッシュ時間ではなくexampleにアクセスするたびに最新のイベントを取得する必要があります.vueはデフォルトでキャッシュスイッチを提供し、計算プロパティオブジェクトでcacheフィールドを指定してキャッシュをオンにするかどうかを制御します.コードの例:
4.よくある質問4.1計算属性getterが実行しないシーンは、前述の例から、計算属性に依存するデータ属性が変更されると、計算属性のgetterメソッドが実行されることが分かった.ただし、依存するデータ属性が変化する場合もあるが、属性を計算するgetterメソッドは を実行しない.
計算属性を含むノードが削除され、テンプレート内の他の場所で参照されていない場合、対応する計算属性getterは実行されません.
el : '#example',
data: {
show : true,
price : 100
},
computed : {
totalprice : function(){
return this.price + 1
}
},
methods : {
toggleShow : function (){
this.show = !this.show
}
}
})
ボタンをクリックしてshowをfalseにすると、p要素が削除され、p要素内部のコンピュータ属性totalpriceのgetterメソッドは実行されませんが、計算属性がテンプレートにずっと表示されている場合、getterメソッドは実行されます. v-repeatで計算属性を使用する場合、バックエンドからJSONデータセットを取得した後、カスタム要素の構築を使用してv-repeatで計算属性を使用する を実現する必要があります.
1.計算属性計算属性とは、属性に依存する値が変化すると、その属性の値が自動的に更新され、それに関連するDOM部分も同期して自動的に更新される
<div id="example">
"text" v-model = 'a'>
"text" v-model = 'b'>
a = {{ a }}, b = {{ b }}, cont = {{ cont }}
div>
var vm = new Vue({
el: '#example',
data: {
a: 1,
b: 2
},
computed: {
// getter
cont: function () {
// this vm
return this.a + this.b
}
}
})
前例からvm.aとvm.bの値が変化する場合、vm.contの値は自動的に更新され、DOMセクションの前のインスタンスに同期して更新されます.getterのみが提供されています.実際にはgetterのほかに計算属性のsetterを設定することもできます.
var app = new Vue({
el: '#example',
data: {
a: 'hah',
b: 'waw',
},
computed: {
cont: {
// getter
get : function(){
// this vm
return this.a + " "+ this.b
},
// setter
set : function( newVal ){
var names = newVal.split(' ')
this.a = name [0]
this.b = name [1]
}
}
}
})
vmを設定するとcontの値の場合vm.aとvm.bの値も自動的に更新されます
2.属性キャッシュの計算+属性メソッドの計算に多くの時間がかかる場合、パフォーマンスに影響します.たとえば、計算属性getterで大きな配列をループして多くの操作を実行すると、その計算属性を頻繁に呼び出すと、計算属性に依存する属性値が変化した場合にのみgetter+が再実行されるという問題があります.vueインスタンスで観察されたデータ属性が変更された場合にのみgetterが再実行されます.ただし、計算プロパティはリアルタイムの非観察データプロパティに依存する場合があります.
"app"> {{ example }}
var vm = new Vue({
el: '#app',
data: {
welcome :'welcome to china!'
},
computed: {
example: function (){
return Date.now() + this.welcome
} }
})
キャッシュ時間ではなくexampleにアクセスするたびに最新のイベントを取得する必要があります.vueはデフォルトでキャッシュスイッチを提供し、計算プロパティオブジェクトでcacheフィールドを指定してキャッシュをオンにするかどうかを制御します.コードの例:
var vm = new Vue({
el :'#app',
data: {
welcome: 'welcome to china!'
},
computed: {
example: {
// , true
cache : false,
get : function (){
return Date.now() + this.welcome
}
}
}
})
4.よくある質問
計算属性を含むノードが削除され、テンプレート内の他の場所で参照されていない場合、対応する計算属性getterは実行されません.
div id="example">
if = 'show'> total price = {{ totalprice}}
var vm = new Vue({el : '#example',
data: {
show : true,
price : 100
},
computed : {
totalprice : function(){
return this.price + 1
}
},
methods : {
toggleShow : function (){
this.show = !this.show
}
}
})
ボタンをクリックしてshowをfalseにすると、p要素が削除され、p要素内部のコンピュータ属性totalpriceのgetterメソッドは実行されませんが、計算属性がテンプレートにずっと表示されている場合、getterメソッドは実行されます.
<div id="example">
<button @click = 'toggleShow'> toggle show total price button>
<p> {{ totalprice}} p>
<p v-if = 'show'> total pirce = {{ totalprice}} p>
div>
var items = [
{ number:1,text:'one'},
{ number:2,text:'two'}
]
var vm = new Vue({
el: '#app',
data: {
items : items
},
components : {
'my-item' : {
replace :true,
computed : {
fulltext : function(){
return 'item' + this.text
}
}
}
}
})