The issue with two way data binding is that it is easy to trigger an infinite loop. Seemingly innocuous patterns like repeating over a filtered array
lead to infinite loops.
Vue’s two-way data binding via v-model
is different. Under the hood it’s one-way data flow: data binding down the component tree from parent to child, and events bubbling up the component tree from child to parent. The key difference is that Vue actually observes values for changes, as opposed to Angular 1, which diffs the entire state after the fact. For example, if you use v-bind on an array, Vue will overwrite the native array’s sort() function with a Vue-aware sort function.