vue如何動態(tài)生成andv圖標
vue動態(tài)生成andv圖標
在最近使用andv的時候,出現(xiàn)了一個問題,在不使用iconfont圖標的前提下使用andv自帶的圖標庫動態(tài)生成icon圖標。
在百度一下后,發(fā)現(xiàn)以下方法
1.新建一個createIcon.js文件
import * as icons from '@ant-design/icons-vue'; import { createVNode } from 'vue' export const CreateIcon = (props)=>{ const {icon} = props; return createVNode(icons[icon]); }
2.使用
<a-menu v-model:selectedKeys="state.selectedKeys" theme="dark" mode="inline" > <template v-for="item in menus" :key="item.path"> <a-sub-menu v-if="item.children && item.children.length" key="item.name" > <template #icon> <CreateIcon :icon="item.icon"></CreateIcon> </template> <template #title>{{ item.title }}}</template> <a-menu-item v-for="itemChild in item.children" :key="itemChild.name"> <span>{{ itemChild.title }}</span> </a-menu-item> </a-sub-menu> <a-menu-item v-else> <template #icon> <CreateIcon :icon="item.icon"></CreateIcon> </template> <span>{{ item.title }}</span> </a-menu-item> </template> </a-menu>
import {CreateIcon} from './CreateIcon.js'; import {Component} from 'vue'; interface routerConfig { path: string; name: string; title: string; icon?:string|Component, children?:routerConfig[], } const menus:routerConfig[] = [ { path: "/home", name: "home", title: "首頁", icon: 'HomeOutlined', children: [], }, ];
vue動態(tài)綁定圖標
圖標和圖片的不同
圖標時字符,圖片時二進制流。
即圖片加載會比圖標慢,且加載圖標最好不要用img標簽,我們可以把圖標當成組件用 import
的方法引入進來,然后當成標簽引入。
安裝 svg
1.使用管理員身份運行cmd窗口,切換到項目目錄下執(zhí)行。
npm add svg
從圖標庫下載圖標
1.阿里圖標庫
2.下載svg
3.在compone目錄下建立一個icons,在icons下建立一個svg目錄,專門用來放圖標。
查看插件的使用方法
vue所有的插件都在 node_modules
中根據下載時的插件名來找到插件 e-cli-plugin-svg
的 README
展示圖標
定義動態(tài)組件 MyIcon.vue
1.其中 myicon
是從父組件傳過來的屬性
2.computed是用來根據 myicon.name
(圖標的名字)來動態(tài)生成圖標地址的。原因是在 export default{}
外引入組件時,我們接收到的props屬性是傳遞不到 export default{}
外面的,所以采用computed來協(xié)助生成 icon
組件。
3.:style
是動態(tài)綁定樣式,此處綁定了寬,高。并在props中設置了默認值,如果父組件不傳遞寬高信息的話,就是使用默認值。
4.:fill
是綁定填充屬性樣式的,也在 props
中設置了默認值。
<template> <div> <component :is="icon" :style="{width : myicon.width , hight : myicon.hight}" :fill="myicon.fill" ></component> </div> </template>
<script> export default{ props:{ myicon:{ name:{ type:String }, width:{ type:String, default:'40px' }, hight:{ type:String, default:'40px' }, fill:{ type:String, default:'#000000' } } }, computed:{ icon(){ return () => import('@/components/icons/svg/'+ this.myicon.name +'.svg?inline') } } } </script> <style> </style>
在main,js中全局引入并定義組件 MyIcon.vue
import mysvg from '@/components/MyIcon.vue' Vue.component('my-icon',mysvg)
調用 my-icon 作為父組件
1.把要傳遞的屬性定義在 myicon:{}
中,其中 name
是必填項,它是圖標的名字,不帶后綴。
<template> <my-icon :name = "scope.row.icon" :width = "50px" :hight = "50px" :fill = "#ff00ff"> </my-icon> </template>
<script> export default { data() { return { myicon:{ name: "position", width: "60px", hight: "60px", fill : "#ff00ff" }, } }, } </script> <style scoped lang="less"> </style>
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解win7 cmd執(zhí)行vue不是內部命令的解決方法
這篇文章主要介紹了詳解win7 cmd執(zhí)行vue不是內部命令的解決方法的相關資料,這里提供了解決問題的詳細步驟,具有一定的參考價值,需要的朋友可以參考下2017-07-07vue-pdf插件實現(xiàn)pdf文檔預覽方式(自動分頁預覽)
這篇文章主要介紹了vue-pdf插件實現(xiàn)pdf文檔預覽方式(自動分頁預覽),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Element樹形控件el-tree實現(xiàn)一鍵全選、反選功能
最近做的項目用到了全選全不選功能,于是就自己動手寫了一個,這篇文章主要給大家介紹了關于Element樹形控件el-tree實現(xiàn)一鍵全選、反選功能的相關資料,需要的朋友可以參考下2023-10-10