form nzHasFeedback 组件兼容设计 #7497
Unanswered
simplejason
asked this question in
Ideas
Replies: 1 comment 1 reply
-
我个人倾向于方案2, |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
DEMO: https://ant.design/components/form-cn/#components-form-demo-validate-static
在先前版本中,Form 为了实现 feedback 会做非常多的样式魔改。对 select 做个偏移,对 datePicker 加个 padding 等等。这让 Form 在 status 样式下和子组件耦合度非常高。所以之后改成了 FormItem 告诉你状态,子组件决定是否要采用。这样对于 Form 而言不用耦合样式,对于三方组件而言也可以通过 context 实现自己的 status 拓展。
ant-design
的 form 表单将 status 和 hasFeedback 下移到组件内部,让子组件根据 form 的状态自动更新error
warning
success
对应的状态和 feedback 图标。但是
input
/input-number
/mention
这类简单结构(无后缀元素)就得根据feedback
字段返回不同的 dom 结构,对于当前 ng-zorro-antd 的使用方式和实现方式都有不同程度影响,在此希望大家讨论下最优的方案。举例
ant-design:
input-number: https://github.com/ant-design/ant-design/blob/master/components/input-number/index.tsx#L101
input: https://github.com/ant-design/ant-design/blob/master/components/input/Input.tsx#L153
在 ng-zorro 中实现
方案 1:
提供 nz-form-feedback 组件,在需要包裹的组件上使用
弊端:需要用户修改原始代码,且需要在 nz-form-feedback 内部判断组件类型,决定 class 的前缀 ,如 ant-input ant-mentions ...
方案 2:
针对相关组件提供 nz-xxx-group 组件,如已有的 nz-input-group,可实现组件前缀后缀的同时复用这个结构实现 feedback 能力,但是要求用户在 form 中使用时只能通过 nz-xxx-group 形式才能支持 feedback icon 能力
方案 3:
在组件内部根据 feedback 属性动态渲染不同的 dom 结构,但是对于 nz-input 指令型目前不支持。
弊端:原来绑定在 host 上的 class 就不能直接绑定了,此时 nz-xxx 组件基本就只能当成一个 element tag
讨论待办 TODO
todo
Beta Was this translation helpful? Give feedback.
All reactions