文档中明确指出永远不要把 v-if 和 v-for 同时用在同一个元素上,显然这是一个重要的注
意事项。
源码里面关于代码生成的部分,能够清晰的看到是先处理 v-if 还是 v-for,顺序上 vue2 和 vue3
正好相反,因此产生了一些症状的不同,但是不管怎样都是不能把它们写在一起的。
03-能说一说双向绑定使用和原理吗?
题目分析:
双向绑定是 vue 的特色之一,开发中必然会用到的知识点,然而此题还问了实现原理,升级
为深度考查。
思路分析:
给出双绑定义
双绑带来的好处
在哪使用双绑
使用方式、使用细节、vue3 变化
原理实现描述
回答范例:
vue 中双向绑定是一个指令 v-model,可以绑定一个响应式数据到视图,同时视图中变化能
改变该值。
v-model 是语法糖,默认情况下相当于:value 和@input。使用 v-model 可以减少大量繁琐的
事件处理代码,提高开发效率。
通常在表单项上使用 v-model,还可以在自定义组件上使用,表示某个值的输入和输出控制。
通过<input v-model="xxx">的方式将 xxx 的值绑定到表单元素 value 上;对于 checkbox,可以
使用 true-value 和 false-value 指定特殊的值,对于 radio 可以使用 value 指定特殊的值;对于
select 可以通过 options 元素的 value 设置特殊的值;还可以结合.lazy,.number,.trim 对 v-mode
的行为做进一步限定;v-model 用在自定义组件上时又会有很大不同,vue3 中它类似于 sync
修饰符,最终展开的结果是 modelValue 属性和 update:modelValue 事件;vue3 中我们甚至
可以用参数形式指定多个不同的绑定,例如 v-model:foo 和 v-model:bar,非常强大!
v-model 是一个指令,它的神奇魔法实际上是 vue 的编译器完成的。我做过测试,包含 v-model
的模板,转换为渲染函数之后,实际上还是是 value 属性的绑定以及 input 事件监听,事件
回调函数中会做相应变量更新操作。编译器根据表单元素的不同会展开不同的 DOM 属性和
事件对,比如 text 类型的 input 和 textarea 会展开为 value 和 input 事件;checkbox 和 radio
类型的 input 会展开为 checked 和 change 事件;select 用 value 作为属性,用 change 作为事
件。
04-Vue 中如何扩展一个组件
此题属于实践题,考察大家对 vue 常用 api 使用熟练度,答题时不仅要列出这些解决方案,
同时最好说出他们异同。
答题思路: