在闪亮的仪表板中隐藏一个元素 (box/tabs)
Hide an element (box/tabs) in shiny dashboard
我有一个闪亮的仪表板,在着陆页上只有一个文本框。用户输入显示相关数据的电子邮件 ID。这很好用。但是,我需要一个框/选项卡面板,在用户到达页面时向用户致意,并在用户开始在文本输入中输入文本(emailid)时消失。这可能吗?
output$introbox=renderUI(box(h3("Welcome to the page. Please enter your email id to proceed")),
conditionalPanel(condition=input.emailid=="")
该框在页面上着陆时显示,但在输入文本时不会消失。
感谢任何帮助。谢谢
是的,这是可能的,因为 daattali sugested shinyjs 可以帮助您完成一些标准的 Javascript 任务。
如果你想隐藏 shinydashboard box
元素你必须(据我所知)使用一些自定义 Javascript 像这样:
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <-dashboardPage(
dashboardHeader(),
dashboardSidebar(
),
dashboardBody(
tags$head(
tags$script(
HTML("
Shiny.addCustomMessageHandler ('hide',function (selector) {
$(selector).parent().slideUp();
});"
)
)
),
box( id ="greetbox",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "info",
div(id="greeting", "Greeting here")
),
box( id ="box",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "success",
textInput("txtbx","Enter text: ")
)
)
)
server <- shinyServer(function(input, output, session) {
observeEvent(input$txtbx,{
if (input$txtbx == "") return(NULL)
session$sendCustomMessage (type="hide", "#greetbox")
print(input$txtbx)
})
})
shinyApp(ui = ui, server = server)
盒子的 html 布局如下所示:
<div class="box box-solid box-info">
<div class="box-body" id="greetbox">
<!-- Box content here -->
</div>
</div>
并且由于我们想要隐藏整个框,我们必须将父元素隐藏到框函数中设置的 id,因此 jQuery 代码段。
Oskar 的回答是正确的。但它实际上并没有使用 shinyjs,它手动包含了所有 JavaScript。您可以使用他的答案,但这里是使用 shinyjs
重写他的答案
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <-dashboardPage(
dashboardHeader(),
dashboardSidebar(
),
dashboardBody(
useShinyjs(),
div(id = "greetbox-outer",
box( id ="greetbox",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "info",
div(id="greeting", "Greeting here")
)
),
box( id ="box",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "success",
textInput("txtbx","Enter text: ")
)
)
)
server <- shinyServer(function(input, output, session) {
observeEvent(input$txtbx,{
if (input$txtbx == "") return(NULL)
hide(id = "greetbox-outer", anim = TRUE)
print(input$txtbx)
})
})
shinyApp(ui = ui, server = server)
我遇到了类似的问题,我的问题出在 box()
上:如果我将 box()
更改为 div()
,那么 show/hide 选项就可以正常工作。
此解决方案更简单,但不如修改标签优雅。只需像这样将 box()
包裹在 div()
上:
div(id = box1, box(...))
div(id = box2, box(...))
然后,您使用 div
的 ID 调用 show/hide。
我有一个闪亮的仪表板,在着陆页上只有一个文本框。用户输入显示相关数据的电子邮件 ID。这很好用。但是,我需要一个框/选项卡面板,在用户到达页面时向用户致意,并在用户开始在文本输入中输入文本(emailid)时消失。这可能吗?
output$introbox=renderUI(box(h3("Welcome to the page. Please enter your email id to proceed")),
conditionalPanel(condition=input.emailid=="")
该框在页面上着陆时显示,但在输入文本时不会消失。
感谢任何帮助。谢谢
是的,这是可能的,因为 daattali sugested shinyjs 可以帮助您完成一些标准的 Javascript 任务。
如果你想隐藏 shinydashboard box
元素你必须(据我所知)使用一些自定义 Javascript 像这样:
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <-dashboardPage(
dashboardHeader(),
dashboardSidebar(
),
dashboardBody(
tags$head(
tags$script(
HTML("
Shiny.addCustomMessageHandler ('hide',function (selector) {
$(selector).parent().slideUp();
});"
)
)
),
box( id ="greetbox",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "info",
div(id="greeting", "Greeting here")
),
box( id ="box",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "success",
textInput("txtbx","Enter text: ")
)
)
)
server <- shinyServer(function(input, output, session) {
observeEvent(input$txtbx,{
if (input$txtbx == "") return(NULL)
session$sendCustomMessage (type="hide", "#greetbox")
print(input$txtbx)
})
})
shinyApp(ui = ui, server = server)
盒子的 html 布局如下所示:
<div class="box box-solid box-info">
<div class="box-body" id="greetbox">
<!-- Box content here -->
</div>
</div>
并且由于我们想要隐藏整个框,我们必须将父元素隐藏到框函数中设置的 id,因此 jQuery 代码段。
Oskar 的回答是正确的。但它实际上并没有使用 shinyjs,它手动包含了所有 JavaScript。您可以使用他的答案,但这里是使用 shinyjs
重写他的答案library(shiny)
library(shinydashboard)
library(shinyjs)
ui <-dashboardPage(
dashboardHeader(),
dashboardSidebar(
),
dashboardBody(
useShinyjs(),
div(id = "greetbox-outer",
box( id ="greetbox",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "info",
div(id="greeting", "Greeting here")
)
),
box( id ="box",
width = 12,
height = "100%",
solidHeader = TRUE,
status = "success",
textInput("txtbx","Enter text: ")
)
)
)
server <- shinyServer(function(input, output, session) {
observeEvent(input$txtbx,{
if (input$txtbx == "") return(NULL)
hide(id = "greetbox-outer", anim = TRUE)
print(input$txtbx)
})
})
shinyApp(ui = ui, server = server)
我遇到了类似的问题,我的问题出在 box()
上:如果我将 box()
更改为 div()
,那么 show/hide 选项就可以正常工作。
此解决方案更简单,但不如修改标签优雅。只需像这样将 box()
包裹在 div()
上:
div(id = box1, box(...))
div(id = box2, box(...))
然后,您使用 div
的 ID 调用 show/hide。