闪亮的 addpopover 函数不适用于 uioutput

shiny addpopover function doesnt work with uioutput

我在 R 中创建了以下闪亮的应用程序

首先我们导入必要的库

 library(shiny)
 library(shinyBS)

下一步是创建一个UI如下

ui =  fluidPage( sidebarLayout( sidebarPanel(sliderInput("bins", "Number of bins:", min = 1, max = 
 50,value = 30), selectInput(inputId = "Select1", label = "Select1", choices = c('A', 'B', 'C'), 
 selected = "A"),  selectInput(inputId = "Select2", label = "Select2", choices = c('A1', 'B1', 'C1'), 
 selected = "A1"), bsTooltip("bins", "Read", "right", options = list(container = "body")) ),
 mainPanel(uiOutput("namelist") ) ))

我们现在创建服务器如下

 server =function(input, output, session) {

   content<-reactive({
    input$Select2    
   })
    output$namelist<-renderUI({

    textInput(inputId = "text1", label =input$Select1)

   }) 

 addPopover(session, "namelist", "Data", content =content() , trigger = 'click')  }

 shinyApp(ui, server)

运行 上的应用程序将创建一个滑块和两个 select 框以及一个对用户输入做出动态反应的输出。当将鼠标悬停在滑块上时,工具提示会显示带有已读的气泡。我无法使 addpopover 函数工作。它应该这样工作,基于 select 2 的输入,弹出消息框中呈现的文本应该改变。该应用程序正在崩溃。当我将 addpopover 命令放在反应环境中时,我是 renderUI 函数输出 - 即文本框消失。我请求有人帮助我。

您可以将 addPopover 包装在 observeobserveEvent 中。我更喜欢observeEvent,推荐here

addPopover 将在每次 content() 更改时更新,这正是我们想要的,因为此弹出窗口应该显示 content()。但是,此弹出窗口的行为有些奇怪(点击有时无效),但我想这与您的应用程序无关。

library(shiny)
library(shinyBS)

ui =  fluidPage(sidebarLayout(
  sidebarPanel(
    sliderInput(
      "bins",
      "Number of bins:",
      min = 1,
      max =
        50,
      value = 30
    ),
    selectInput(
      inputId = "Select1",
      label = "Select1",
      choices = c('A', 'B', 'C'),
      selected = "A"
    ),
    selectInput(
      inputId = "Select2",
      label = "Select2",
      choices = c('A1', 'B1', 'C1'),
      selected = "A1"
    ),
    bsTooltip("bins", "Read", "right", options = list(container = "body"))
  ),
  mainPanel(uiOutput("namelist"))
))

server =function(input, output, session) {

  content<-reactive({
    input$Select2    
  })
  output$namelist<-renderUI({

    textInput(inputId = "text1", label = input$Select1)

  }) 

  observeEvent(content(), {
    addPopover(session, "namelist", "Data", content = content() , trigger = 'click')
  })

}

shinyApp(ui, server)