Wie in der offiziellen Website-Dokumentation erwähnt, implementiert die v-model
-Direktive von Vue eine bidirektionale Bindung von Daten.
https://vuejs.org/v2/guide/fo...
In der tatsächlichen Entwicklung ist der Datenfluss der Komponenten jedoch einseitig, und es wird nicht empfohlen, dass untergeordnete Komponenten die Eigenschaften der übergeordneten Komponenten ändern.
Die Frage ist also, ob Vues Abhängigkeitsverfolgung [prinzipiell die bidirektionale Bindung unterstützt, aber aus Gründen der Entwicklungsfreundlichkeit nur einen einseitigen Datenfluss empfiehlt] oder [unterstützt prinzipiell keine bidirektionale Bindung, v-model
hört nur auf das DOM Was ist mit syntaktischem Zucker für die Event-Implementierung?
Vue 的依赖追踪是【原理上不支持双向绑定,v-model 只是通过监听 DOM 事件实现的语法糖】
vue的依赖追踪是通过 Object.defineProperty 把data对象的属性全部转为 getter/setter来实现的;当改变数据的某个属性值时,会触发set函数,获取该属性值的时候会触发get函数,通过这个特性来实现改变数据时改变视图;也就是说只有当数据改变时才会触发视图的改变,反过来在操作视图时,只能通过DOM事件来改变数据,再由此来改变视图,以此来实现双向绑定
大致过程如下
双向绑定是在同一个组件内,将数据和视图绑定起来,和父子组件之间的通信并无什么关联;
组件之间的通信采用单向数据流是为了组件间更好的解耦,在开发中可能有多个子组件依赖于父组件的某个数据,假如子组件可以修改父组件数据的话,一个子组件变化会引发所有依赖这个数据的子组件发生变化,所以vue不推荐子组件修改父组件的数据,直接修改props会抛出警告