使用renderUI()的窗口标题

时间:2017-10-23 06:13:28

标签: r shiny

我正在尝试根据用户选择在我的闪亮应用中拥有可更改的窗口标题。虽然主标题和应用程序的其他部分没有问题,但我正在努力争取窗口标题。

我尝试使用renderUI()uiOutput(),但没有成功。

# packages
library("shiny")
library("shinyWidgets")

# app
runApp(list(
  # UI  
  ui = shinyUI(fluidPage(
    # title panel
    tagList(div(div(style = "display: inline-block; ",
                    h1(uiOutput("uiMainTitle")), class = "main_title"),
                div(style = "width: 65px; display: inline-block; float: right; ",
                    pickerInput(inputId = "color",
                                label = " ",
                                choices = c("blue", "red")))),
            tags$title(uiOutput("uiWindowTitle")))
    )),
  # SERVER
  server = function(input, output, session) {
    # main title
    output$uiMainTitle <- renderUI({
      ifelse(input$color == "blue", "Blue title", "Red title")})
    # window title
    output$uiWindowTitle <- renderUI({
      ifelse(input$color == "blue", "Blue app", "Red app")})
    }
  )
)

热烈欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

您可以使用shinyjs包和一些js代码。这解决了这个问题:

# packages
library("shiny")
library("shinyWidgets")
library("shinyjs")

# app
runApp(list(
  # UI  
  ui = shinyUI(fluidPage(
    useShinyjs(),
    # title panel
    tagList(div(div(style = "display: inline-block; ",
                    h1(uiOutput("uiMainTitle")), class = "main_title"),
                div(style = "width: 65px; display: inline-block; float: right; ",
                    pickerInput(inputId = "color",
                                label = " ",
                                choices = c("blue", "red")))),
            tags$title("blue")
  ))),
  # SERVER
  server = function(input, output, session) {
    # main title
    output$uiMainTitle <- renderUI({
      ifelse(input$color == "blue", "Blue title", "Red title")})
    # window title
    # output$uiWindowTitle <- renderUI({
    #   ifelse(input$color == "blue", "Blue app", "Red app")})

    observeEvent(input$color,{
      #in the place of input$color you can put your personal title
      titlejs=paste0("document.title ='", input$color,"'")
      runjs(titlejs)
    })
  }
)
)