【问题标题】:Ionic 4, Ionicon library adding a custom iconIonic 4,Ionicon 库添加自定义图标
【发布时间】:2020-04-29 10:42:25
【问题描述】:

我目前正在使用 Vue Cli 生成一个包含 ionic 和 ionicon 库的项目。

package.json

  "@ionic/core": "^4.11.7",
  "@ionic/pwa-elements": "^1.4.1",
  "@ionic/vue": "0.0.9",
  "ionicons": "^4.6.3",

我正在尝试将自定义图标添加到我的项目中。 我正在关注 Ionic 文档 https://ionicons.com/usage,该文档指出,要添加自定义 SVG 图标,必须执行以下步骤:

要使用自定义 SVG,请在 src 属性中提供其 URL 以请求 外部 SVG 文件。 src 属性的作用与 URL 必须可以从 请求图像。此外,外部文件可以 只能是有效的 SVG,并且不允许在 SVG 元素。

我已按照示例进行操作,但未加载图标。我发现的同一案例场景的另一个示例是以下https://golb.hplar.ch/2018/01/Custom-SVG-icons-in-Ionic.html。按照这个示例,我尝试直接在 src 中添加图标的 SVG 代码。这似乎可行,但出于组织目的,如果我可以将文件路径传递给组件,我会发现它更方便。

【问题讨论】:

    标签: vue.js ionic-framework ionic4


    【解决方案1】:

    这就是我为使其在 Vue 中工作所做的工作

    1. 在你的 vue-cli 项目中,安装最新的@ionic/vue
      npm i @ionic/vue@0.0.9
    2. 修改main.js

    如果您只想使用自定义图标:

    import Vue from 'vue'
    import App from './App.vue'
    import Ionic from '@ionic/vue'
    import '@ionic/core/css/ionic.bundle.css';
    
    Vue.use(Ionic);
    Vue.config.productionTip = false
    
    new Vue({
      render: function (h) { return h(App) },
    }).$mount('#app')
    

    如果你也想使用 ionicons(在 addIcons 我是 基本上是这样做的:
    addIcons({"ios-star": star.ios, "md-star": star.md})。这当然是可选的,但这样我只需要 如果我想在我的应用程序中添加一个新图标,则向我的数组添加一个新条目, 你可以阅读更多关于here的信息。):

    import Vue from 'vue'
    import App from './App.vue'
    import Ionic from '@ionic/vue'
    import '@ionic/core/css/ionic.bundle.css'
    import { addIcons } from 'ionicons'
    import camelCase from 'lodash/fp/camelCase'
    
    // ionicons.com App icons
    const appIcons = ['star', 'images']
    // ionicons.com Logos
    const logos = ['logo-facebook']
    
    Vue.use(Ionic);
    Vue.config.productionTip = false
    
    addIcons({
     // App icons object
     ...appIcons.reduce((acc, name) => {
       return {
         ...acc,
         [`ios-${name}`]: require('ionicons/icons')[camelCase(name)].ios,
         [`md-${name}`]: require('ionicons/icons')[camelCase(name)].md
       }
     }, {}),
     // Logos object
     ...logos.reduce((acc, name) => {
       return {
         ...acc,
         [name]: require('ionicons/icons')[camelCase(name)]
       }
     }, {}),
    })
    
    new Vue({
     render: function (h) { return h(App) },
    }).$mount('#app')
    
    1. 将我的自定义 svg 图标复制到 public 文件夹中
    2. 使用自定义图标:<ion-icon src="/custom.svg" />

    编辑:如果您想使用src/assets 而不是public 文件夹
    我还尝试将我的自定义图标移动到src/assets 文件夹,因为vue-cli public folder。我发现由于 vue-cli 的某种原因,webpack 在将它们放入src/assets 文件夹并使用图标作为<ion-icon src="./assets/custom.svg" /> 时不会拾取自定义图标。因此,如果您想将图标保留在 src/assets 中,此解决方法对我有用(基于 this):

    <ion-icon :src="require(`@/assets/custom.svg`)" />
    

    【讨论】:

      【解决方案2】:

      这就是我所做的,它奏效了。因此,也许您需要检查是否可以生成正确的 SVG。

      1. 生成正确的 SVG。我在这里免费做了一个:

        • www.morphistic.app
        • 点击顶部的“创作者”按钮
        • 单击选择任何预制形状,确保其位于 sn-p 框架中心
        • 点击右上角分享,保存SVG
      2. 将此 SVG 加载到项目的“资产”文件夹中(对于任何静态资产)

      3. 现在将您的 ion-icon 指向该 svg:

      &lt;ion-icon src="/assets/mysvg.svg"&gt;&lt;/ion-icon&gt;

      我刚才用 Ionic 4.11.2 测试了它

      【讨论】:

      • 嗨,谢尔盖,感谢您的快速回答。我的@ionic/core 版本是 4.11.7。我尝试降级到 4.11.2 并从您建议的网站添加生成的图标,但它不起作用。
      • 所以没有错误并且图像根本不显示?你有哪个 ionicons 版本?
      • 对不起,我可能犯了一个误导性的错误。我没有使用 Ionic 框架。该项目是使用 Vue 3 Cli 生成的,它导入了 ionic 和 ionicons 库。所以 package.json 看起来像: "dependencies": { "@ionic/core": "^4.11.7", "@ionic/pwa-elements": "^1.4.1", "@ionic/vue" :“0.0.9”、“core-js”:“^3.4.4”、“ionicons”:“^4.6.3”、“register-service-worker”:“^1.6.2”、“vue”: “^2.6.10”、“vue-i18n”:“^8.15.3”、“vue-router”:“^3.1.3”、“vuex”:“^3.
      猜你喜欢
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多