R 闪亮:将网页链接添加到 actionButton

R shiny: Add weblink to actionButton

我的 shiny 应用程序中有一个框,其中包含一个包含在 shiny dashboard 框内的按钮,如下所示:

shiny::fluidRow(
  shinydashboard::box(title = "Intro Page", "Some description...", 
      shiny::actionButton(inputId='ab1', label="Learn More", icon = icon("th"))
  )
)

我想在按钮中包含一个网页link,这样当我点击它时,它应该会在新标签页中打开相应的网页。

我知道我可以这样做:

# this does not create a submit button though, it just creates a link.
tags$div(class = "submit",
         tags$a(href = "www.google.com", 
                "Learn More", 
                target="_blank")
)

但是有了 actionButton,就有了一个漂亮的按钮,我可以给它添加一个看起来更美观的图标。

如何在闪亮的 actionButton 中添加 link?

您可以添加参数

onclick ="location.href='http://google.com';"

到操作按钮并单击它将带您到当前 window 中的 google.com 或者您可以添加

onclick ="window.open('http://google.com', '_blank')"

您将被带到新标签页中的Google

也就是

shiny::fluidRow(
  shinydashboard::box(title = "Intro Page", "Some description...", 
      shiny::actionButton(inputId='ab1', label="Learn More", 
                          icon = icon("th"), 
                          onclick ="window.open('http://google.com', '_blank')")
  )
)

onclick方法很简单,但是依赖javascript。更重要的是,如果你想动态生成 link 会很尴尬。我想在我的应用程序中有一个 link 可以根据用户输入打开特定页面,我发现你可以将 link 装扮成一个按钮。

首先我用uiOutputrenderUI处理动态部分,因为link只能在服务器部分生成。简单的 link 将是

a(h4("Open Link"), target = "_blank", href = paste0("http://www.somesite/", some_link))

只需 运行 R 中的这一行我们就可以得到

<a target="_blank" href="http://www.somesite/somelink">
  <h4>Open Link</h4>
</a>

要创建按钮,我们可以看看操作按钮的外观。

> actionButton("download", "Download Selected",
              icon = icon("cloud-download"))
<button id="download" type="button" class="btn btn-default action-button">
  <i class="fa fa-cloud-download"></i>
  Download Selected
</button>

那么我们可以这样做

shiny::a(h4("Open Link", class = "btn btn-default action-button" , 
    style = "fontweight:600"), target = "_blank",
    href = paste0("http://www.somesite/", some_link))

获得

<a target="_blank" href="http://www.somesite/some_link">
  <h4 class="btn btn-default action-button" style="fontweight:600">Open Link</h4>
</a>

现在我们有一个看起来像按钮的link,您可以使用样式参数或自定义css进一步自定义其样式。使用chrome/firefox开发者工具打开你的应用,将css修改成你想要的效果,然后将修改后的css添加到www文件夹中的style.css覆盖默认样式。

如果您查看许多 html 标签函数的输出,您会发现实际上可以将 assemble 很多东西组合在一起以获得很多自定义项。

基于@dracodoc 关于动态生成链接的观点,您可以使用renderUI 来达到预期的效果。在下面的示例中,input$open_tab 指的是一个通用的 actionButton。请注意,您仍然必须在 UI 中包含对下面 renderUI 的引用(即 uiOutput("ui_open_tab"))

output$ui_open_tab <- renderUI({
  req(input$open_tab > 0)
  link <- function_to_build_the_link(a, b, c)
  tags$script(paste0("window.open('", link, "', '_blank')"))
})