-
-
Notifications
You must be signed in to change notification settings - Fork 8.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🐛[BUG] 从服务端请求菜单时 icon 和 access 不生效 #8101
Comments
icon 只能用 dom,access 必须要触发页面的重新渲染才有用 |
服务器请求回来应该自己处理,是不会走到插件的逻辑的。 |
能不能给个详细的icon使用dom渲染的方法,我尝试了下,没成功 |
能否给点儿详细的代码提示,我将menu数据中的icon字段直接替换成 dom,不生效 |
在utils中封装了一个方法;
就能解决了 |
你的这个代码会导致 js 大小增加 2m 左右,要慎重 |
请问怎么更优雅的解决呢? |
菜单access怎么解决呢 |
有啥好的解决办法么,解决服务器请求菜单设置icon图标 |
@chenshuai2144 同问该怎么优雅的解决icon |
用了个死办法,枚举
|
得枚举很大一部分... @chengzi-code |
所以这么问题优雅的解决了吗 |
icon 不显示的问题,可以自定义菜单项渲染方法,并引用自定义的图标库。 // MenuItemRender.tsx,`app.tsx`直接引用即可
import { MenuDataItem } from '@ant-design/pro-layout';
import { createFromIconfontCN } from '@ant-design/icons';
import { Link, useIntl } from 'umi';
let IconFont = createFromIconfontCN({
// 以下是默认值,也可以按需要指定
// scriptUrl: defaultSettings.iconfontUrl,
});
const getIcon = (
icon?: string | React.ReactNode,
iconPrefixes: string = 'icon-',
): React.ReactNode => {
if (typeof icon === 'string' && icon !== '') {
// 可加入多种图标类型的兼容写法,此处省略
if (icon.startsWith(iconPrefixes)) {
return <IconFont type={icon} className={icon} />;
}
}
return icon;
};
const MenuItem: React.FC<MenuDataItem> = (menuItemProps) => {
const { formatMessage } = useIntl();
const { isUrl: isLink, path, icon, locale } = menuItemProps;
const localeStr = locale as string; // 和 `formatMessage中` 的 `id` 类型不一致,只好断言一下
const itemContent = (
<span className="ant-pro-menu-item">
{getIcon(icon)}
<span className="ant-pro-menu-item-title">{formatMessage({ id: localeStr })}</span>
</span>
);
return isLink || !path || location.pathname === path ? (
itemContent
) : (
<Link to={path}>{itemContent}</Link>
);
};
export default MenuItem; 还是想用 Ant Design 的图标库?拿去吧:https://www.iconfont.cn/collections/detail?cid=9402 |
@kevinsheep 是写法问题吗?iconPrefixes 的判断也去掉了,菜单加载出来一直是一个路径... |
确认一下,icon中的名称,与你的图标库中对应图标命名完全一致(大小写敏感) |
引用的就是Ant Design 的图标库 |
~\config\defaultSettings.ts iconfontUrl 怎么设置的?完整点的代码贴一下? |
scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js' 。 |
对比你的字库文件和菜单设置中的icon名称,问题应该是你的图标字库文件内容: |
你在这个js中搜索一下,有没有一个叫’icon-smile‘的图标名? |
我以为这个链接时 antd 的图标库...里面没有smile的图标 |
|
这个子菜单的icon好像渲染不出来 |
这里有 |
这是写死的icon |
这么久了还有挖坟的 |
不改代码,直接在nginx里面加一行rewrite规则即可: |
动态菜单的渲染 subMenuItemRender 和 menuItemRender 两个渲染API要配合使用。menuItemRender可以参考 #8101 (comment) |
您好 请问解决了吗 |
|
1 similar comment
|
我也是这个思路 击掌(✧∇✧)╯╰(✧∇✧)̣ |
根据图标字符串创建图标元素,除了使用上文提到的这个方法: |
如何重新渲染呢! 贴个示例悄悄呢,大神 |
🐛 bug 描述
https://beta-pro.ant.design/docs/advanced-menu-cn
根据该文档的方式实现从服务端请求菜单,返回的菜单中包含 icon 信息和 accss 信息,icon 显示错误,access 不生效。
icon显示结果:
access无效。
📷 复现步骤
返回的菜单信息:
path: '/system',
name: 'system',
icon: 'setting',
access: 'noPermission',
🏞 期望结果
显示设置的icon,access 生效
💻 复现代码
© 版本信息
🚑 其他信息
The text was updated successfully, but these errors were encountered: