1- import  {  computed ,  inject ,  SetupContext ,  toRef ,  provide  }  from  'vue' ; 
1+ import  {  computed ,  inject ,  SetupContext ,  toRef ,  provide ,  watch  }  from  'vue' ; 
2+ import  {  FORM_TOKEN ,  FORM_ITEM_TOKEN  }  from  '../../form' ; 
23import  {  RadioProps ,  RadioGroupProps ,  radioGroupInjectionKey ,  UseRadioFn ,  valueTypes ,  UseRadioButtonFn  }  from  './radio-types' ; 
34
45export  function  useRadio ( props : RadioProps ,  ctx : SetupContext ) : UseRadioFn  { 
6+  const  formContext  =  inject ( FORM_TOKEN ,  undefined ) ; 
7+  const  formItemContext  =  inject ( FORM_ITEM_TOKEN ,  undefined ) ; 
58 const  radioGroupConf  =  inject ( radioGroupInjectionKey ,  null ) ; 
69
710 /** 是否禁用 */ 
811 const  isDisabled  =  computed ( ( )  =>  { 
9-  return  props . disabled  ||  radioGroupConf ?. disabled . value ; 
12+  return  formContext ?. disabled   ||   props . disabled  ||  radioGroupConf ?. disabled . value ; 
1013 } ) ; 
1114 /** 判断是否勾选 */ 
1215 const  isChecked  =  computed ( ( )  =>  { 
@@ -57,8 +60,14 @@ export function useRadio(props: RadioProps, ctx: SetupContext): UseRadioFn {
5760 } ) ; 
5861
5962 const  size  =  computed ( ( )  =>  { 
60-  return  radioGroupConf ?. size . value  ||  props . size ; 
63+  return  formContext ?. size   ||   radioGroupConf ?. size . value  ||  props . size ; 
6164 } ) ; 
65+  watch ( 
66+  ( )  =>  props . modelValue , 
67+  ( )  =>  { 
68+  formItemContext ?. validate ( 'change' ) . catch ( ( err )  =>  console . warn ( err ) ) ; 
69+  } 
70+  ) ; 
6271 return  { 
6372 isChecked, 
6473 radioName, 
@@ -70,12 +79,20 @@ export function useRadio(props: RadioProps, ctx: SetupContext): UseRadioFn {
7079} 
7180
7281export  function  useRadioGroup ( props : RadioGroupProps ,  ctx : SetupContext ) : void   { 
82+  const  formItemContext  =  inject ( FORM_ITEM_TOKEN ,  undefined ) ; 
7383 /** change 事件 */ 
7484 const  emitChange  =  ( radioValue : valueTypes )  =>  { 
7585 ctx . emit ( 'update:modelValue' ,  radioValue ) ; 
7686 ctx . emit ( 'change' ,  radioValue ) ; 
7787 } ; 
7888
89+  watch ( 
90+  ( )  =>  props . modelValue , 
91+  ( )  =>  { 
92+  formItemContext ?. validate ( 'change' ) . catch ( ( err )  =>  console . warn ( err ) ) ; 
93+  } 
94+  ) ; 
95+ 
7996 // 注入给子组件 
8097 provide ( radioGroupInjectionKey ,  { 
8198 modelValue : toRef ( props ,  'modelValue' ) , 
0 commit comments