版本 1.x ,不是 2
情况就是有一个组件是card,内部有一个区域可以放置各种操作组件(基本就是按钮组,有一些特殊 UI 情况)。然后项目中这个 card 可能的操作类型是比较确定的。
一个典型场景是在某个页面下, card 的操作类型是不固定的。
这个 card 的设计我自己有三种想法
- A 内部实现所有的操作类型,暴露一个 actionType 开关
- B 内部保留 slot ,使用者负责填充 action 组件
- C 设置一个 cardBase 保留 slot ,对每种操作类型封装一个对应的 actionCard
个人感觉是非常倾向于 C ,然而由于不同的 actionCard 除了 baseCard 的参数相同之外,控制 action 的参数都不同,结果就会导致 fragment instance 问题。
然后我就犹豫了,目前的问题是
- 怎样在类型切换时,优雅的不绑定不属于这个类型的参数,避免 attribute ignore warning
- 就算不绑定额外参数给 card ,这个可以理解成基于继承的封装还是产生了 fragment 问题,这个问题是可以忽略的吗?也就是眼前的这个场景是不是 OOP 大于 vue 组件约定?
- 假如严格执行 fragment 约束,看起来解决方案应该回退到 B ,看起来其实使用者到底是切换 card ,还是切换 cardAction 组件,差别是不是也没那么大? B 和 C 之前,也是有”组合>继承“的道理?
提前感谢大家的意见。