MVVM
見るViewModelにMVVM名がモデルである
MVVMである3つの部分から構成:
M:Model
V:View
VM:ViewModel
バインダー、またはデータバインディングエンジン内のビューモデルにMVVMで。私たちは、結合ビューに表示されているモデルビュー(ビュー)上のデータと何かの一部を宣言する必要があります。ViewModelにモデル上の更新データは、データラインが自動的にバインダービューを渡されますとき。ユーザーがビューを操作すると逆に、バインダーのデータが自動的にモデルに更新されます。これは、結合、双方向のデータです。
VUE双方向のデータバインディングの原則
vue
作成vm
時間は、データは、インスタンスに配置され、Object.defineProperty
動的データを追加するための方法getter
及びsetter
方法を。
データを取得する際には、対応するトリガするgetter
方法、設定データは、トリガに対応する時間setter
方法。
次にときsetter
、時間トリガ方法の完全な、さらに内部のトリガwatcher
データの変更は、更新操作を表示する、終了します。
Vueが内部データによってハイジャック&結合双方向のデータを達成するためにサブスクライブ・モデルを公開します
データは、データのすべてに対するObject.defineProperty法によって乗っ取られ、データを動的にゲッターとセッターメソッドに追加されます。
データの変更は、加入者(ウォッチャー)、トリガーのコールバックリスナー応答に発表したとき。
Object.defineProperty( 、obj
、)attr
である3つのパラメータの方法desc
- OBJ:オブジェクトのプロパティを定義または変更する必要があります。
- ATTR:定義する必要があるまたは変更プロパティ。
- DESC:この属性記述子(記述子と記述子を含むデータアクセス)、オブジェクトのパラメータとして渡されたが、パラメータは、6つのオプションがあります:
- 値:属性の値を設定します。
- 書き込み可能:ブール、属性が書き込み可能な場合(その値を変更するかどうか)。
- 列挙:プロパティを横断することができますブールは、(のような、Object.keysにするために...)が得られます。
- 設定:ブール型、プロパティが削除されてもよいかどうか、および他の書き込み可能に加えて、記述を変更することができるかどうかを設定します。
- 取得:プロパティの値を取得した場合、関数コールバック関数が(例えばにconsole.log(プロプ))が実行され、デフォルトは未定義です。
- セット:コールバック関数は、関数が設定されている場合、プロパティの値は、デフォルトが定義されていない実行されます。
Object.defineProperty欠点がでvue3。
1、无法监听es6的Set、Map 变化;
2、无法监听Class类型的数据;
3、属性的新加或者删除也无法监听;
4、数组元素的增加和删除也无法监听。
私たちは、単純な例を理解します
var obj = {}
let middel = 123
Object.defineProperty(obj,"msg",{
get(){
return middel
},
set(val){
middel = val
}
})
console.log(obj.msg) //获取对象的属性的时候,会调用自身的get方法 返回123
obj.msg = 123456 //设置对象的属性的时候,会调用自身的set方法
console.log(obj.msg) //123456
我々はMSGがobjの値を取得する場合には、その後、彼はgetメソッドDESCコールを行くだろうobj.msg印刷する場合、我々は戻り値middelを取得し、123を印刷します。obj.msg = 123456をOBJ MSGに割り当てられている、メソッド呼び出しは、この時間を設定123456 valは、この時間middel = 123456をパラメータとして渡され、その後middelのヴァルに割り当てDESCう。再びobj.msg印刷が123456であるとき、我々は戻っ値。