Ionic-Vue Ionicons 5.x.x 不显示图标

Ionic-Vue Ionicons 5.x.x doesn't show icon

我将 ionic-vue 与 ionicons 5.0.1 一起使用,但在调用后

<ion-icon name="add"></ion-icon>

我正在按照 https://dev.to/aaronksaunders/build-your-first-ionic-vue-app-18kj and https://github.com/ionic-team/ionic/issues/19078 教程进行操作,但是卡住了,无法显示 FAB 中的图标。 这是我的语法,谢谢你的帮助。

<template>
   <ion-page>

        ....

        <ion-fab vertical="bottom" horizontal="end" slot="fixed">
            <ion-fab-button @click="$router.push({ name: 'new-item' })">
                <ion-icon name="add"></ion-icon>
            </ion-fab-button>
        </ion-fab>
        </ion-content>
    </ion-page>
</template>

<script>

...

import { addIcons } from 'ionicons';
import * as allIcons from 'ionicons/icons';

const currentIcons = Object.keys(allIcons).map(i => {
  const key = i.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`)
  if(typeof allIcons[i] === 'string') {
    return {
      [key]: allIcons[i],
    }
  }
  return {
    ['ios-' + key]: allIcons[i].ios,
    ['md-' + key]: allIcons[i].md,
  };
});

const iconsObject = Object.assign({}, ...currentIcons);
addIcons(iconsObject);

...
</script>

结果 FAB 不显示图标 'add':

嘿,感谢您查看博客和视频...

你也可以通过这种方式获取图标...

<template>
<ion-button @click="handleAddItemClicked" >
  <ion-icon slot="icon-only" :src="i.saveOutline" ></ion-icon>
</ion-button>
      <ion-button @click="handleAddItemClicked" >
  <ion-icon slot="icon-only" :src="i.save" ></ion-icon>
</ion-button>
      <ion-button @click="handleAddItemClicked" >
  <ion-icon slot="icon-only" :src="i.saveSharp" ></ion-icon>
</ion-button>
</template>

<script>
import * as allIcons from "ionicons/icons";

...

  data() {
    return {
      i : allIcons,
    };
  },
</script>

我也在遵循相同的指南(https://dev.to/devmount/how-to-use-ionicons-v5-with-vue-js-53g2),但我遇到了同样的问题。

我决定将 ionicons 版本降级到版本 4:

npm i ionicons@4

这解决了我的问题。

我从指南中使用的代码:

<template>
  <ion-page>
    <ion-header>
      <ion-toolbar color="primary">
        <ion-title>Home</ion-title>

      </ion-toolbar>
    </ion-header>
    <ion-content padding>
      <ion-list>
        <ion-item>
          <ion-checkbox slot="start"></ion-checkbox>
          <ion-label>
            <h1>Create Ideaa</h1>
            <ion-note>Run Idea by Brandy</ion-note>
          </ion-label>
          <ion-badge color="success" slot="end">5 Days</ion-badge>
        </ion-item>
      </ion-list>
      <ion-fab vertical="bottom" horizontal="end" slot="fixed">
        <ion-fab-button >
          <ion-icon name="add"  ></ion-icon>
        </ion-fab-button>
      </ion-fab>
    </ion-content>
  </ion-page>
</template>

 <script>

  import { add } from "ionicons/icons";
  import { addIcons } from "ionicons";
  addIcons({
    "ios-add": add.ios,
    "md-add": add.md
  });

  export default {
    name: "HomePage",
    props: {
      msg: String
    }
  };
</script>

在您的main.js文件中

import * as allIcons from "ionicons/icons";

Vue.mixin({
  data() {
    return {
      i: allIcons,
    };
  },
  methods: {
    icon(name) {
      return this.i[name];
    }
  }
});

现在您可以在 vue 应用程序的任何地方使用 <ion-icon :src="icon('search')"></ion-icon>,它会起作用

我在 @modus/ionic-vue 回购的一个已关闭问题中关注了这条评论:https://github.com/ModusCreateOrg/ionic-vue/issues/120#issuecomment-633666592

import { addIcons } from 'ionicons'
import { add, cartOutline } from 'ionicons/icons'
addIcons({ add, "cart-outline": cartOutline })

这适用于 ionicons@5.1.2 安装。请注意多词图标导入是驼峰大小写而不是烤肉串大小写。如果您想为 ion-icon 使用名称的 kebab 大小写变体,您必须自己对 kebab 大小写名称进行分配,就像上面 cart-outline 的情况一样。

尽管如果您想一次添加所有对象并支持 kebab 大小写,您可以像这样映射一个新对象:

import { addIcons } from 'ionicons'
import * as allIcons from 'ionicons/icons'
import _ from 'lodash'
addIcons(_.mapKeys(allIcons, (value, key) => _.kebabCase(key))

对于使用组合的 Ionic Vue 3 API:

<template>
  <ion-icon :icon="rocket" />
</template>

<script>
import { IonIcon } from '@ionic/vue';
import { rocket } from 'ionicons/icons';

export default {
  components: { IonIcon },
  setup() {
    return {
      rocket
    }
  }
}
</script>

对于<script setup>

<script setup>
import { IonIcon } from '@ionic/vue';
import { rocket } from 'ionicons/icons';
</script>

<template>
  <ion-icon :icon="rocket" />
</template>

在我尝试了所有方法之后,任何地方都没有报告任何错误,只是图标不存在。

请检查两次,您是否设置了图标的颜色,因为在默认情况下图标样式颜色是继承的。 所以,如果你有一个绿色按钮,如果你没有指定,图标的颜色也将是绿色。