SidebarMenu не работает должным образом при использовании includeHTML - PullRequest
0 голосов
/ 19 мая 2018

Я использую Rshinydashboard, и у меня возникла проблема, когда я пытаюсь включить HTML-документ в свое приложение с помощью includeHTML.После того, как 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")
)

BuildТестовое приложение

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 голосов
/ 12 июня 2018

Это потому, что вы включили полный HTML-файл в блестящий пользовательский интерфейс, и вы должны включать содержимое только между <body> и </body> (цитата из yihui)

AРешением может быть запуск дополнительной строки для автоматического исправления 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")))

0 голосов
/ 25 мая 2018

Вы просто забыли о фигурных скобках - для renderUI необходимо выражение в качестве аргумента.

renderUI ( { includeHTML (...) } )

Код

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

отлично работает.

Или вы можете использовать этот код

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

В этом случае вам необходимо указать путь к файлу теста.rmd, здесь он находится в одном каталоге с исходным файлом.

...