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>
在我尝试了所有方法之后,任何地方都没有报告任何错误,只是图标不存在。
请检查两次,您是否设置了图标的颜色,因为在默认情况下图标样式颜色是继承的。
所以,如果你有一个绿色按钮,如果你没有指定,图标的颜色也将是绿色。
我将 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>
在我尝试了所有方法之后,任何地方都没有报告任何错误,只是图标不存在。
请检查两次,您是否设置了图标的颜色,因为在默认情况下图标样式颜色是继承的。 所以,如果你有一个绿色按钮,如果你没有指定,图标的颜色也将是绿色。