在我的离子React应用程序中,我使用IonSelect的形式。我需要关闭IonSelect下拉菜单,当下拉菜单打开时,在硬件返回按钮事件侦听器调用中以编程方式关闭该下拉菜单。下面是代码
export const SingleSelection: React.FC = () => {
const [gender, setGender] = useState<string>();
useEffect(() => {
document.addEventListener('ionBackButton', (ev: any) => {
ev.detail.register(1000, async (processNextHandler: any) => {
console.log('Handler B was called!');
processNextHandler();
});
});
return () => {
console.log("use effect return");
}
}, [])
return (
<IonPage>
<IonContent>
<IonItem>
<IonLabel>Gender</IonLabel>
<IonSelect value={gender} placeholder="Select One" onIonChange={e => setGender(e.detail.value)}>
<IonSelectOption value="female">Female</IonSelectOption>
<IonSelectOption value="male">Male</IonSelectOption>
</IonSelect>
</IonItem>
</IonContent>
</IonPage>
);
};
字符串
**Updated:[solved]:**这里是我更新的完整代码。在硬件返回按钮事件侦听器方法中,首先关闭离子选择(如果它保持打开),然后关闭模态
const ModalExample: React.FC = () => {
const [showModal, setShowModal] = useState(false);
const [gender, setGender] = useState<string>();
useEffect(() => {
document.addEventListener('ionBackButton', (ev: any) => {
ev.detail.register(1000, async (processNextHandler: any) => {
console.log('Handler B was called!');
try {
console.log("close ion select");
const alert = await alertController.getTop();
if (alert) {
alert.dismiss();
return;
}
console.log("close modal")
const element = await modalController.getTop();
if (element) {
//element.dismiss();
setShowModal(false)
return;
}
} catch (error) {
console.log(error);
}
processNextHandler();
});
});
return () => {
console.log("use effect return");
}
}, [])
return (
<IonContent>
<IonModal isOpen={showModal} cssClass='my-custom-class'>
<p>This is modal content</p>
<IonItem>
<IonLabel>Gender</IonLabel>
<IonSelect value={gender} placeholder="Select One" onIonChange={e => setGender(e.detail.value)}>
<IonSelectOption value="female">Female</IonSelectOption>
<IonSelectOption value="male">Male</IonSelectOption>
</IonSelect>
</IonItem>
<IonButton onClick={() => setShowModal(false)}>Close Modal</IonButton>
</IonModal>
<IonButton onClick={() => setShowModal(true)}>Show Modal</IonButton>
</IonContent>
);
};
型
3条答案
按热度按时间jjhzyzn01#
我有办法了。使用
alertController
IonSelect下拉菜单可以以编程方式关闭,字符串
tkclm6bt2#
尽管按硬件返回按钮会自动关闭IonSelect下拉菜单。如果这对你不起作用,这里有一个使用
useRef
钩子的解决方案:字符串
11dmarpk3#
在ionic7中,如果您使用界面弹出框
字符串