使用includeHTML时sidebarMenu无法正常运行

时间:2018-05-19 20:14:17

标签: r shiny shinydashboard

我正在使用Rshinydashboard,当我尝试使用includeHTML在我的应用程序中包含一个html文档时,我遇到了一个问题。一旦menuItems& menSubItems扩展,他们无法收回。我已经探索了其他解决方案,但没有找到。如果你有任何想法可能是什么问题或有另一种方式在应用程序中包含HTML报告,我将不胜感激。如果可以,请参阅下面的代码并提供帮助!

创建一个RMD文件来创建一个html报告(如果你没有一个躺着)

---
title: "test"
output: html_document
---
## Test HTML Document
This is just a test.

构建测试html报告

# Build Test HTML file
rmarkdown::render(
  input = "~/test.rmd",
  output_format = "html_document",
  output_file = file.path(tempdir(), "Test.html")
)

构建测试应用程序

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(
      id = "sidebarmenu",
      menuItem(
        "A", tabName = "a",  icon = icon("group", lib="font-awesome"),
        menuSubItem("AA", tabName = "aa"),
        conditionalPanel(
          "input.sidebarmenu === 'aa'",
          sliderInput("b", "Under sidebarMenu", 1, 100, 50)
        ),
        menuSubItem("AB", tabName = "ab")
      )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "a", textOutput("texta")),
      tabItem(tabName = "aa", textOutput("textaa"), uiOutput("uia")),
      tabItem(tabName = "ab", textOutput("textab"))
    )
  )
)

server <- function(input, output) {
  output$texta <- renderText("showing tab A")
  output$textaa <- renderText("showing tab AA")
  output$textab <- renderText("showing tab AB")
  output$uia <- renderUI(includeHTML(path = file.path(tempdir(), "Test.html")))
}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:1)

那是因为你在闪亮的用户界面中包含了一个完整的HTML文件 您应该只包含<body></body> 之间的内容(引自yihui)

解决方案可能是在运行Test.html后自动运行额外的一行来修复rmarkdown::render()

xml2::write_html(rvest::html_node(xml2::read_html("Test.html"), "body"), file = "Test2.html")

然后有

output$uia <- renderUI(includeHTML(path = file.path(tempdir(), "Test2.html")))

答案 1 :(得分:-1)

你只是忘记了大括号 - renderUI需要一个表达式作为参数。

renderUI( { includeHTML(...)}

代码

  output$uia <- renderUI({includeHTML(path = file.path(tempdir(), "Test.html"))})

工作正常。

或者您可以使用此代码

output$uia <- renderUI(includeMarkdown(path = file.path("test.rmd")))

在这种情况下,您需要指定文件test.rmd的路径,此处它与源文件位于同一目录中。