R Shiny:Shiny.onInputChange使用数据切换

时间:2018-10-30 03:04:15

标签: javascript r shiny

我打算为我的闪亮应用程序构建一个简单的路由器。这是一个示例:

$date = DateTime::createFromFormat('d', 15)->add(new DateInterval('P1M'));

echo $date->format('Y-m-d'); // 2018-11-15

但是,在点击href链接后,使用两个不同的 library(shiny) ui <- fluidPage( uiOutput("landingPage"), tags$script(HTML( '$(document.body).on("click", "[navto]", function (e) { Shiny.onInputChange("navigateTo", $(e.currentTarget).attr("navto")); });' )) ) server <- function(input, output) { output$landingPage <- renderUI({ print(paste("Landing ", input$navigateTo)) toOut <- pageSplashUI() return(toOut) }) } pageSplashUI <- function() { tags$a(href="", navto="GotoNavPage-2", "GotoNavPage-2") } # Run the application shinyApp(ui = ui, server = server) 值刷新了 output$landingPage 两次,第一次是预期的“ GotoNavPage-2 ”,而第二次是 NULL

enter image description here

经过一段时间的努力,我发现可以解决此问题,可以将 data-toggle` =“ tab” 添加到href中。唯一的变化如下:

发件人:

input$navigateTo

收件人:

tags$a(href="",  navto="GotoNavPage-2", "GotoNavPage-2")

现在,程序正在按预期运行: enter image description here

我只是不明白为什么更改会生效? tags$a(href="", `data-toggle`="tab", navto="GotoNavPage-2", "GotoNavPage-2") =“ tab” 的用途是什么?

1 个答案:

答案 0 :(得分:1)

您看到的是因为每次您单击链接时页面都会自动刷新。就这么简单!

如果将文本输入添加到UI,这将很明显。在输入中输入一些文本,然后单击链接,您将看到页面刷新。

这是事件的顺序:

  1. 应用启动,输入为NULL,因此您会看到“着陆”
  2. 您按下链接,因此输入获得一个值,然后看到“ Landing GotoNavPage-2”
  3. 由于按下了链接,页面刷新了
  4. 应用再次启动(刷新),因此您再次看到“着陆”

当您添加data-toggle="tab"(或引导程序中的任何其他可能的值)时,Bootstrap javascript具有一些钩子,当您单击具有该特殊属性的链接时,它会忽略它作为链接,即为什么您看不到这种情况呢?

您只需将href由“”更改为“#”,就不会刷新页面

说句公道话,我现在还不清楚这正在发生。首先,我花了5分钟弄不清楚为什么会这样,直到我意识到慢慢调试它以注意到这一点。