ActionSheet动作面板

从底部弹出的模态框,提供和当前场景相关的 2 个以上的操作动作,也支持提供标题和描述。内置固定的展示样式、不支持特别灵活的修改。

规则

  • 提供清晰的退出按钮。
  • 可高亮破坏性操作,e.g. 将『删除』处理成红色文本。
  • 不要放置过多内容,避免面板纵向滚动。

代码演示

基本用法

最简单的用法。

  1. import { Component } from '@angular/core';
  2. import { ActionSheetService, ToastService } from 'ng-zorro-antd-mobile';
  3. import { en_US, ru_RU, zh_CN, sv_SE, da_DK } from 'ng-zorro-antd-mobile';
  4. @Component({
  5. selector: 'demo-action-sheet-basic',
  6. template: `
  7. <WingBlank>
  8. <div Button (onClick)="showActionSheet(message)">showActionSheet</div>
  9. <WhiteSpace></WhiteSpace>
  10. <div Button (onClick)="showShareActionSheet()">showShareActionSheet</div>
  11. <WhiteSpace></WhiteSpace>
  12. <div Button (onClick)="showShareActionSheetMulpitleLine()">showShareActionSheetMulpitleLine</div>
  13. <ng-template #message>
  14. <div class="am-action-sheet-message">123</div>
  15. </ng-template>
  16. </WingBlank>
  17. `
  18. })
  19. export class DemoActionSheetBasicComponent {
  20. dataList = [
  21. { url: 'OpHiXAcYzmPQHcdlLFrc', title: '发送给朋友' },
  22. { url: 'wvEzCMiDZjthhAOcwTOu', title: '新浪微博' },
  23. { url: 'cTTayShKtEIdQVEMuiWt', title: '生活圈' },
  24. { url: 'umnHwvEgSyQtXlZjNJTt', title: '微信好友' },
  25. { url: 'SxpunpETIwdxNjcJamwB', title: 'QQ' }
  26. ].map(obj => ({
  27. icon: `<img src="https://gw.alipayobjects.com/zos/rmsportal/${obj.url}.png" style="width:36px"/>`,
  28. title: obj.title
  29. }));
  30. constructor(private _actionSheet: ActionSheetService, private _toast: ToastService) {}
  31. showActionSheet = message => {
  32. const BUTTONS = ['Operation1', 'Operation2', 'Operation2', 'Delete', 'Cancel'];
  33. this._actionSheet.showActionSheetWithOptions(
  34. {
  35. options: BUTTONS,
  36. cancelButtonIndex: BUTTONS.length - 1,
  37. destructiveButtonIndex: BUTTONS.length - 2,
  38. title: 'title',
  39. message: message,
  40. maskClosable: true
  41. },
  42. buttonIndex => {
  43. console.log(buttonIndex);
  44. }
  45. );
  46. }
  47. showShareActionSheet = () => {
  48. this._actionSheet.showShareActionSheetWithOptions(
  49. {
  50. options: this.dataList,
  51. message: 'I am description, description, description',
  52. locale: zh_CN
  53. },
  54. buttonIndex => {
  55. return new Promise(resolve => {
  56. this._toast.info('closed after 1000ms');
  57. setTimeout(resolve, 1000);
  58. });
  59. }
  60. );
  61. }
  62. showShareActionSheetMulpitleLine = () => {
  63. const data = [[...this.dataList, this.dataList[2]], [this.dataList[3], this.dataList[4]]];
  64. this._actionSheet.showShareActionSheetWithOptions(
  65. {
  66. options: data,
  67. message: 'I am description, description, description',
  68. locale: en_US
  69. },
  70. (buttonIndex, rowIndex) => {
  71. console.log(buttonIndex);
  72. }
  73. );
  74. }
  75. }

ActionSheet动作面板 - 图1

API

showActionSheetWithOptions(options: Object, callback: Function)

显示 action sheet,options对象必须包含以下的一个或者多个:

  • options (array of strings) - 按钮标题列表 (required)
  • cancelButtonIndex (int) - 按钮列表中取消按钮的索引位置
  • destructiveButtonIndex (int) - 按钮列表中破坏性按钮(一般为删除)的索引位置
  • title (string) - 顶部标题
  • message (string/React.element) - 顶部标题下的简要消息
  • maskClosable (bool) - 点击蒙层是否允许关闭,默认允许

callback函数支持返回 Promise

showShareActionSheetWithOptions(options: Object, callback: Function)

显示分享 action sheet,options对象必须包含以下的一个或者多个:

  • options (array of {icon: TemplateRef | innerHTML, title: string}) - 分享按钮列表 (required)

    • 可以是二维数组,能显示多行按钮,例如[[{icon,title},...],...]表示两行两列。当为二维数组时callback有两个参数,第一个为序列、第二个为序列。
  • cancelButtonText (string) - 取消按钮文案,默认为Cancel

  • title (string) - 顶部标题

  • message (string/React.element) - 顶部标题下的简要消息

  • maskClosable (bool) - 点击蒙层是否允许关闭,默认允许

  • locale - 国际化,可覆盖全局[LocaleProvider](https://ng.mobile.ant.design/components/locale-provider/zh)的配置 | Object: { dismissText }

  • callback函数支持返回 Promise

showShareActionSheetWithOptions(options: Object, failureCallback: Function, successCallback: Function)

显示分享 action sheet,options对象必须包含以下的一个或者多个:

  • options:
    • message(string): 顶部标题下的简要消息
    • title(string): 顶部标题
    • url(string): 分享的 url
    • excludedActivityTypes(array): 指定在actionsheet中不显示的活动
  • Callback:
    • failureCallback(error): 分享失败调用;
    • successCallback(completed, method):分享成功调用;

close() - programmatically close.

以上函数调用后,会返回一个引用,可以通过该引用关闭弹窗。

  1. constructor(actionSheet: ActionSheetService) {
  2. const ref: ActionSheetService = actionSheet.showShareActionSheetWithOptions(
  3. {
  4. options: this.dataList,
  5. title: 'action-title',
  6. message: 'I am description, description, description'
  7. },
  8. buttonIndex => {
  9. return new Promise(resolve => {
  10. setTimeout(resolve, 1000);
  11. });
  12. }
  13. );
  14. ref.close(); // 或 ref.destroy(); 将直接销毁对话框
  15. }

ActionSheetRef

ActionSheetRef 对象用于控制对话框以及进行内容间的通信

通过服务方式 ActionSheetService.xxx() 创建的对话框,都会返回一个 ActionSheetRef 对象,该对象具有以下方法:

方法/属性说明
afterOpen和 AfterOpen 一样, 但类型是Observable<void>
afterClose和 AfterClose 一样, 但类型是Observable<void>
close(result: any) => void关闭(隐藏)对话框。注:当用于以服务方式创建的对话框,此方法将直接 销毁 对话框(同destroy方法)
destroy(result: any) => void销毁对话框。注:仅用于服务方式创建的对话框(非服务方式创建的对话框,此方法只会隐藏对话框)
getContentComponent() => Component获取对话框内容中Content的Component实例instance。注:当对话框还未初始化完毕(ngOnInit未执行)时,此函数将返回undefined