Vue watch、computedデータ傍受
14831 ワード
データリスニングは、メモリ変数の値の変化をリスニングし、値が変化したときに処理します.
例えば、検索ボックスを双方向に変数をバインドし、検索ボックスの内容が変更された場合、対応する予選項目を提供する.
たとえば、地域を選択すると、選択した省が変更された場合、その省が管轄する地域も対応して変更されます.
watchは単一の変数値の変化を傍受し、computedは複数の変数値の変化を同時に傍受する.
watchは単一変数値の変化を監視する
<div id="app">
<input type="text" name="" v-model="content" /><br />
div>
<script>
new Vue({
el:'#app',
data(){
return {
content:'' //
}
},
watch:{ // ,watch ,{}
// ,watch
content(newVal,oldVal){ // ( , ){ }, , 、 ,
console.log(newVal,oldVal);
if(newVal=='love'){
alert("the content is love");
}
}
}
});
script>
watchの深さリスニング
オブジェクト、配列という複雑なタイプの変数をリスニングする場合は、深度リスニングを使用する必要があります.
深度リスニングでは、オブジェクトのプロパティ、配列要素が1レベルずつリスニングされます.
<div id="app">
:<input type="text" name="" v-model="user.name" /><br />
:<input type="text" name="" v-model="user.age" /><br />
div>
<script>
new Vue({
el:'#app',
data(){
return {
user:{ // user
name:'', //
age:'' // ,
}
};
},
watch:{
user:{ //
handler(newVal){ // , handler
console.log(newVal); // 、 。 oldValue,oldValue newValue ,
if(newVal.name=='chy' && newVal.age==20){
alert("the name is chy and the age is 20");
}
},
deep:true //
}
},
});
script>
私がバインドしているのはuserオブジェクトのnameプロパティです.nameフィールドを直接リスニングできますか?これで深さリスニングを使用しませんか?
いいえ、傍受する変数は、オブジェクト自体が変数であり、オブジェクトの属性は変数ではありません.
computedは複数の変数値の変化を同時に傍受する
<div id="app">
:<input type="text" name="" v-model="n1" /><br />
:<input type="text" name="" v-model="n2" /><br />
:<span>{{sum}}span>
div>
<script>
new Vue({
el:'#app',
data(){
return {
n1:'',
n2:'' // sum
};
},
computed:{ //watch ,computed , n1、n2,
sum(){ //
return Number(this.n1)+Number(this.n2); // v-model , this 。Number(String)
}
}
});
script>