zoukankan      html  css  js  c++  java
  • vue 引入 fontawesome 报错 Could not find one or more icon(s) 解决

    在 vue 项目中引用 fontawesome , 按照官方说明如下步骤操作

    1、 终端中执行

    $ npm i --save @fortawesome/fontawesome-svg-core
    $ npm i --save @fortawesome/free-solid-svg-icons
    $ npm i --save @fortawesome/vue-fontawesome

    2、src/main.js 中引入注册对应包(剧透下解决方法之一: 把下面代码中的 faUserSecret 都改成 fas 就 ok 了)

    import Vue from 'vue'
    import App from './App'
    import { library } from '@fortawesome/fontawesome-svg-core'
    import { faUserSecret } from '@fortawesome/free-solid-svg-icons'
    import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
    
    library.add(faUserSecret)
    
    Vue.component('font-awesome-icon', FontAwesomeIcon)
    
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      components: { App },
      template: '<App/>'
    })

    3、src/App.vue 中使用

    <template>
      <div id="app">
        <font-awesome-icon icon="user-secret" />
      </div>
    </template>
    
    <script>
    export default {
      name: 'App'
    }
    </script>

    4、ok 运行, 一个小黑人图标成功显示。但当我试图使用别的图标时

    <font-awesome-icon icon="play" />

    我喜提了如下报错 ( ̄O ̄;) 

    Could not find one or more icon(s) {
        prefix: "fas",
        iconName: "play"
    }

    无脑继续看官网文档,复制粘贴了几个例子进去,都是报错。于是跟进源码到这段:

    function findIconDefinition(iconLookup) {
        var _iconLookup$prefix = iconLookup.prefix,
            prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,
            iconName = iconLookup.iconName;
        if (!iconName) return;
        return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);
    }

    根据传入的 icon 属性, 会去 library.definitions 里面找图标数据, 这时候能看到  library.definitions 的值是: 

    {
        "fas": {
            "user-secret": [448, 512, [], "f21b", "M383.9 308.3l23.9-62.6...babalabala..."]
        }
    }

    才恍然大悟,真是被自己蠢哭了。一开始从官网复制粘贴的太顺手,忽略了这里

    import {faUserSecret} from '@fortawesome/free-solid-svg-icons'

    我只引用了 faUserSecret 一个图标,同时 library 里也只加了这一个

    library.add(faUserSecret)

    上面原因找到了,解决就简单了。

    解决方案

    方案一:每次按需引入,只添加当前页面需要使用的图标

    import {faUserSecret,faPlay} from '@fortawesome/free-solid-svg-icons'
    ibrary.add(faUserSecret,faPlay)
     <font-awesome-icon icon="user-secret" 

    方案二:一次性引入整个图标库,后面想用哪个用哪个,不用反复的去添加注册

    import {fas} from '@fortawesome/free-solid-svg-icons'
    ibrary.add(fas)
     <font-awesome-icon icon="user-secret" />
     <font-awesome-icon icon="play" />

    以上两种方案,各有千秋没有对错,看实际情况用就是了。

    ( ps: 点进 /@fortawesome/free-solid-svg-icons/ 在 index.d.ts 里面可以找到所有可引用的图标定义 )

  • 相关阅读:
    struts1下载地址
    基础知识浮点数
    基础知识this[String]
    矩阵基础知识(二)
    矩阵基础知识(三)
    設計公司軟件開發需求分析流程
    動態調用js文件
    图片的淡入淡出的实现方法
    IIS7.5(经典/集成),IIS6,asp.net 4.0下配置Url映射(asp.net mvc)
    页面状态加载....
  • 原文地址:https://www.cnblogs.com/muriel/p/11631543.html
Copyright © 2011-2022 走看看