【问题标题】:Ionic-Vue Ionicons 5.x.x doesn't show iconIonic-Vue Ionicons 5.x.x 不显示图标
【发布时间】:2020-08-08 20:32:45
【问题描述】:

我在 ionicons 5.0.1 中使用了 ionic-vue,但在调用之后

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

我在关注https://dev.to/aaronksaunders/build-your-first-ionic-vue-app-18kjhttps://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 不显示图标“添加”:

【问题讨论】:

  • 您已经找到解决方案了吗?

标签: ionic-framework vuejs2 ionicons ionic-vue


【解决方案1】:

对于使用 Composition API 的 Ionic Vue 3:

<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>

对于&lt;script setup&gt;RFC

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

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

【讨论】:

    【解决方案2】:

    我也遵循相同的指南 (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>
    

    【讨论】:

    • ionicons 版本降级为4.x.x 也对我有用!
    【解决方案3】:

    在您的 ma​​in.js 文件中

    import * as allIcons from "ionicons/icons";
    
    Vue.mixin({
      data() {
        return {
          i: allIcons,
        };
      },
      methods: {
        icon(name) {
          return this.i[name];
        }
      }
    });
    

    现在你可以在 vue 应用程序的任何地方使用&lt;ion-icon :src="icon('search')"&gt;&lt;/ion-icon&gt;,它可以工作了

    【讨论】:

      【解决方案4】:

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

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

      <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>
      

      【讨论】:

        【解决方案5】:

        我在@modus/ionic-vue repo 的已关闭问题中关注了此评论: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 case 变体,您必须自己对 kebab case 名称进行分配,就像上面的 cart-outline 的情况一样。

        如果你想一次添加所有这些并支持 kebab case,你可以像这样映射一个新对象:

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

        【讨论】:

          【解决方案6】:

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

          请检查两次,您是否设置了图标的颜色,因为默认图标样式颜色是继承的。 因此,例如,如果您有一个绿色按钮,如果您不指定,图标的颜色也将是绿色。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-17
            • 2020-07-01
            • 2020-09-02
            • 2022-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多