Rmd flexdashboard如何在navbar右侧添加动态自定义文本
flexdashboard导航栏右侧添加自定义文本实现方案
两种方案都能实现需求,按需选择即可。
方案1:YAML原生配置(最简单,适配绝大多数场景)
flexdashboard本身内置了导航栏左右侧自定义配置项,不需要额外写前端代码,直接在YAML头的输出配置里加navbar字段,通过right参数指定要放在右侧的内容即可,完全支持R内联代码实现动态文本渲染。
修改后的YAML配置参考:
title: "Influencer Adex Report" date: "`r analysis_date`" Author: 'Peter Fico' output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill navbar: right: - text: "`r paste0('分析日期: ', analysis_date)`" - icon: "fa-user" text: "负责人: Peter Fico"
配置使用注意点:
text字段支持任意合法的R内联表达式,只要返回字符串即可,动态内容可以直接通过R代码生成- 支持同时添加多个右侧元素,会按书写顺序从左到右排布
- 内置支持Font Awesome图标,直接配置
icon参数即可使用,不需要额外引入前端资源
渲染后内容会自动排布在导航栏右侧,和目标效果完全一致。
方案2:JS注入自定义(适合高定制化需求)
如果需要做更复杂的效果,比如文本随页面交互实时更新、自定义文本样式、加特殊交互元素,可以在文档内嵌入一小段JS,直接向导航栏注入自定义元素。
把下面的代码块放到Rmd文档的任意位置(建议放在开篇第一个R代码块之后)即可:
```{js, echo=FALSE} document.addEventListener('DOMContentLoaded', function() { // 定位导航栏右侧容器 const rightNav = document.querySelector('.nav.navbar-nav.navbar-right') // 创建自定义内容节点,可自行调整样式、内容 const customItem = document.createElement('li') customItem.innerHTML = `<span style="color:#fff;margin-right:1rem;padding-top:15px;display:inline-block;">数据最后更新时间:${new Date().toLocaleString()}</span>` // 插入到导航栏右侧 rightNav.prepend(customItem) }) ```
如果需要把R环境里的动态变量传入JS使用,加一个R代码块把变量挂载到JS全局环境即可,示例:
```{r, echo=FALSE} tags$script(paste0("window.reportUpdateTime = '", analysis_date, "'")) ```
之后在上面的JS代码里直接调用window.reportUpdateTime就能拿到R侧传递的动态值,实现完全自定义的动态内容展示。
内容的提问来源于stack exchange,提问作者Dr-Mozart
相关产品推荐
相关产品推荐

