网站搜索

angular - Ionic3 ActionSheet:如何使用 Fontawesome 的自定义图标?


我在 Ionic3 中的 ActionSheet 按钮中使用来自 Fontawesome 的自定义图标时遇到了问题。

据我所知,你可以例如在你的 actionsheet 按钮的 title/text 属性中添加这段代码:<i class="fas fa-ad"></i>,然后图标就会出现。

但自从 Ionic 3 之后,title/text 属性仅限于字符串,这不再可行。

我也尝试过将那些 Fontawesome 图标作为 PNG,然后像在这个 Stackoverflow 问题中一样用作自定义 CSS 背景,但这也不起作用。图片就是显示不出来。

所以我最终只是使用了那些由 Ionic 提供的 ionicons 图标,就像这样:

import { Component } from '@angular/core';

import { Platform, ActionSheetController } from 'ionic-angular';


@Component({
  templateUrl: 'basic.html'
})
export class BasicPage {
  constructor(
    public platform: Platform,
    public actionsheetCtrl: ActionSheetController
  ) { }

  openMenu() {
    let actionSheet = this.actionsheetCtrl.create({
      title: 'Albums',
      cssClass: 'action-sheets-basic-page',
      buttons: [
        {
          text: 'Delete',
          role: 'destructive',
          icon: !this.platform.is('ios') ? 'trash' : null,
          handler: () => {
            console.log('Delete clicked');
          }
        },
        {
          text: 'Share',
          icon: !this.platform.is('ios') ? 'share' : null,
          handler: () => {
            console.log('Share clicked');
          }
        },
        {
          text: 'Play',
          icon: !this.platform.is('ios') ? 'arrow-dropright-circle' : null,
          handler: () => {
            console.log('Play clicked');
          }
        },
        {
          text: 'Favorite',
          icon: !this.platform.is('ios') ? 'heart-outline' : null,
          handler: () => {
            console.log('Favorite clicked');
          }
        },
        {
          text: 'Cancel',
          role: 'cancel', // will always sort to be on the bottom
          icon: !this.platform.is('ios') ? 'close' : null,
          handler: () => {
            console.log('Cancel clicked');
          }
        }
      ]
    });
    actionSheet.present();
  }
}

你们知道如何将 FontAwesome 图标添加到 ActionSheet 按钮吗?我似乎找不到任何有用的帮助。

答案#1

我建议做类似于你可以在 ion-tabs 中更改图标的方式。Ionic 论坛(带有自定义 SVG 的 ionic tabs)基本思路是让 Ionic 处理设置 HTML 和应用 CSS 标签的繁重工作。然后你只需将你的 SVG 放在他们的字体图标(Ionic 3)的位置,但使用在他们的图标集里不存在的名称。这可以在你的 app.scss 中完成。

ion-action-sheet {
  ion-icon {
    width: 3rem;
    height: 3rem;
  }

  .ion-ios-trash-solid,
  .ion-md-trash-solid {
    content: url(../assets/icon/trash-solid.svg);
  }

  .ion-ios-share-alt-square-solid,
  .ion-md-share-alt-square-solid {
    content: url(../assets/icon/share-alt-square-solid.svg);
  }

  .ion-ios-play-solid,
  .ion-md-play-solid {
    content: url(../assets/icon/play-solid.svg);
  }

  .ion-ios-heart-regular,
  .ion-md-heart-regular {
    content: url(../assets/icon/heart-regular.svg);
  }

  .ion-ios-times-solid,
  .ion-md-times-solid {
    content: url(../assets/icon/times-solid.svg);
  }
}

然后可以使用以下方式创建操作表

let actionSheet = this.actionsheetCtrl.create({
    title: 'Albums',
    cssClass: 'action-sheets-basic-page',
    buttons: [
      {
        text: 'Delete',
        role: 'destructive',
        icon: 'trash-solid',
        handler: () => {
          console.log('Delete clicked');
        }
      },
      {
        text: 'Share',
        icon: 'share-alt-square-solid',
        handler: () => {
          console.log('Share clicked');
        }
      },
      {
        text: 'Play',
        icon: 'play-solid',
        handler: () => {
          console.log('Play clicked');
        }
      },
      {
        text: 'Favorite',
        icon: 'heart-regular',
        handler: () => {
          console.log('Favorite clicked');
        }
      },
      {
        text: 'Cancel',
        role: 'cancel',
        icon: 'times-solid',
        handler: () => {
          console.log('Cancel clicked');
        }
      }
    ]
  });
  actionSheet.present();

另外,如果你选择了不同的位置,你还需要将所需的 SVG 放入 src/assets/icon 或其他目录,并修改 CSS 中的路径。