【问题标题】:R Shiny Dynamic text in header (reactive renderUI)标题中的 R Shiny Dynamic 文本(反应式 renderUI)
【发布时间】:2017-09-07 12:13:29
【问题描述】:

我正在尝试将动态文本放入闪亮的标题中,并已设法将文本放入其中,但在从反应式表达式接收到新数据后无法对其进行更新。要将文本放在标题中,我使用了一个基本的 Java 调用 tags$script

我担心的是,renderUI 只渲染第一次,并且不会在响应值 (val) 更新时强制渲染,这正是我所需要的。

对于下面这个奇怪的例子,我很抱歉,我有一个巨大的仪表板,它有几个链接的依赖项,我试图在下面的可重现示例中复制依赖项的类型。

library(shiny)
library(shinydashboard)

ui <- fluidPage(
    dashboardPage(skin = 'black',
                  dashboardHeader(title = "test"),
                  dashboardSidebar(
                      sidebarMenu(id = 'MenuTabs',
                                  menuItem("dummy", tabName = "rawanalysis", selected = TRUE, icon = icon("dashboard"))
                      )
                  ),
    dashboardBody(
        uiOutput(outputId = 'Header'),
        fluidRow(
            box(
                actionButton("change", "Change")
            )
    ))))


server <- function(input, output) {

    Go_rv <- reactiveValues(val = 0)
    observeEvent(input$change, {

        sam <- rnorm(1)

        if(sam > 0){
            Go_rv$val <- TRUE
        } else {
            Go_rv$val <- FALSE
        }

    })

    val <- reactive({
        print(Go_rv$val)
        if(Go_rv$val){

            out <- 0
        } else {
            out <- -5
        }    

        return(out)


    })

    output$Header <- renderUI({

        removeUI(
            selector = "div:has(> #Header)"
        )

        header_text <- paste0('$(document).ready(function() {
                              $("header").find("nav").append(\'<div class="myClass">', val(), '</div>\');})')

        tags$script(HTML(header_text),
                    id = 'Header'
        )
    })

}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: javascript r shiny


    【解决方案1】:

    基本上,带有observeEventreactive 文本输出应该可以完成这项工作!

    library(shiny)
    library(shinydashboard)
    
    ui <- fluidPage(
      dashboardPage(skin = 'black',
                    dashboardHeader(title = textOutput('test')),
                    dashboardSidebar(
                      sidebarMenu(id = 'MenuTabs',
                                  menuItem("dummy", tabName = "rawanalysis", selected = TRUE, icon = icon("dashboard"))
                      )
                    ),
                    dashboardBody(
                      #uiOutput(outputId = 'Header'),
                      fluidRow(
                        box(
                          actionButton("change", "Change")
                        )
                      ))))
    
    
    server <- function(input, output,session) {
    
    
      title_change <- reactive({
        input$change
        as.character(Sys.time())
      })
    
    
    observeEvent(input$change, { output$test <- renderText({ title_change()
    
    })
    })
    
    
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 嗨,amrss,也许我忘了提到解决方案必须位于标题的中心,这就是我使用 tags$script 部分的原因。在尝试使用此标签的解决方案时,我收到错误消息。
    • @Sharma 当你的意思是居中时,你想要它在侧边栏还是在右侧?
    • 如果您不需要侧边栏,那么更简单的解决方案是dashboardHeader(title = textOutput('test'),titleWidth = 1050)
    • 是的,我不需要侧边栏标题。该解决方案有些工作,但现在我有一个非常奇怪的 URL,并且失去了更改颜色和字体的能力,这是我以前拥有的。你知道如何修复 URL 和更改字体样式吗?
    • 抱歉,奇怪的 URL 是什么意思?以及改变仪表板的颜色?你能说得更具体点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多