我正在寻找一种方法,可以将HTML文本(嵌套在服务器部分)链接到特定的Shiny tabPanel(嵌套在UI中)。假设我们有以下应用程序:
library(shiny)
shinyUI(fluidPage(
sidebarLayout(
mainPanel(
tabsetPanel(
type="tabs",
tabPanel("Contents", htmlOutput("contents")),
tabPanel("Plot", plotOutput("plot")) # <- A link to here
)
)
)
))
shinyServer(function(input, output) {
output$contents <- renderText({
HTML("A link to <a href='#Plot'>Plot</a>") # <- from there
})
output$plot({
some ggplot
})
})
如何在文本中创建一个链接,然后将其重定向到某个选项卡。我尝试了锚标记,但由于ID在应用程序的每次启动时都不断变化,因此它们似乎无法正常工作。
谢谢。
答案 0 :(得分:1)
我不知道使用链接是否可行。但是您可以使用按钮和updateTabsetPanel
。
library(shiny)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(),
mainPanel(
tabsetPanel(
type="tabs",
id = "tabset",
tabPanel("Contents", actionButton("go", "Go to plot")),
tabPanel("Plot", plotOutput("plot"))
)
)
)
)
server <- function(input, output, session) {
observeEvent(input$go, {
updateTabsetPanel(session, "tabset", "Plot")
})
output$plot <- renderPlot({
ggplot(mtcars, aes(x=cyl, y=disp)) + geom_point()
})
}
shinyApp(ui, server)
答案 1 :(得分:0)
由于斯特凡·洛朗(StéphaneLaurent)向我指出了正确的方向,所以我设法创建了所需的解决方案。为了将所有HTML文本保留在服务器功能中,我使用了renderUI
和actionLink
的组合。现在,解决方案如下所示:
library(shiny)
shinyUI(fluidPage(
sidebarLayout(
mainPanel(
tabsetPanel(
type="tabs",
id = "tabset", # <- Key element 1
tabPanel("Contents", htmlOutput("contents")),
tabPanel("Plot", plotOutput("plot"))
)
)
)
))
shinyServer(function(input, output, session) {
output$contents <- renderUI({ # <- Key element 2
list(
HTML(<p>Some text..</p>),
actionLink("link", "Link to Plot") # <- Key element 3
)
})
observeEvent(input$link, {updateTabsetPanel(session, "tabset", "Plot")}) # <- Key element 4
output$plot({
some ggplot
})
})