使用 shiny 和 shinydashboard 在 menuItem 中使用更多功能时 tabItem 无法显示内容
tabItem cannot show the content when more functions in menuItem using shiny and shinydashboard
我正在学习 shiny and shinydashboard。我的代码是这样的:
library(shiny)
library(shinydashboard)
library(DT)
library(RODBC)
library(stringr)
library(dplyr)
ch<-odbcConnect('B1P HANA',uid='fchen4',pwd='XUEqin0312')
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Query1",tabName="Query1",icon=icon("table"),
numericInput('Start1','Start Date',19800312,min=20170101,max=20200101),
numericInput('End1','End Date',19800312,min=20170101,max=20200101),
textInput('Office1','Office ID','0'),
submitButton("Submit")),
menuItem("Query2",tabName="Query2",icon=icon("table"),
numericInput('Start2','Start Date',20180101,min=20170101,max=20200101),
numericInput('End2','End Date',20180101,min=20170101,max=20200101),
textInput('Office2','Office ID','0'),
submitButton("Submit"))
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName="Query1",h2("Dashboard tab content")),
tabItem(tabName = "Query2",h2("Widgets tab content"))
)
)
ui <- dashboardPage(
dashboardHeader(title = 'LOSS PREVENTION'),
sidebar,
body
)
server <- function(input, output) {
}
shinyApp(ui, server)
仪表板如下所示:
你可以看到,当我在侧边栏中放置一些输入框时,文本无法在主要部分显示。
但是,当我的代码是这样的时候:
library(shiny)
library(shinydashboard)
library(DT)
library(RODBC)
library(stringr)
library(dplyr)
ch<-odbcConnect('B1P HANA',uid='fchen4',pwd='XUEqin0312')
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Query1",tabName="Query1",icon=icon("table")),
menuItem("Query2",tabName="Query2",icon=icon("table"))
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName="Query1",h2("Dashboard tab content")),
tabItem(tabName = "Query2",h2("Widgets tab content"))
)
)
ui <- dashboardPage(
dashboardHeader(title = 'LOSS PREVENTION'),
sidebar,
body
)
server <- function(input, output) {
}
shinyApp(ui, server)
那么结果是这样的:
你可以看到现在侧边栏没有输入,然后主栏现在有文字了。这太奇怪了。
这在目前 shinydashboard
中实际上是一件非常烦人的事情。提供了一些解决方法 here by Winston Chang, but the best solution in my opinion is this one:
基本上发生的事情是,当您将其他输入元素插入 menuItem
时,它会丢失 data-toggle
和 data-value
属性。因此,dashboardBody
中的 tabItem
不能再与 menuItem
一起 link,因此应用无法显示正文中的内容。
您可以使用自定义函数 (convertMenuItem
) 手动设置 data-toggle
和 data-value
,以便 menuItem
和 tabItem
是 link再次编辑。
代码:
library(shiny)
library(shinydashboard)
convertMenuItem <- function(mi,tabName) {
mi$children[[1]]$attribs['data-toggle']="tab"
mi$children[[1]]$attribs['data-value'] = tabName
mi
}
sidebar <- dashboardSidebar(
sidebarMenu(
convertMenuItem(menuItem("Query1",tabName="Query1",icon=icon("table"),
numericInput('Start1','Start Date',19800312,min=20170101,max=20200101),
numericInput('End1','End Date',19800312,min=20170101,max=20200101),
textInput('Office1','Office ID','0'),
submitButton("Submit")), tabName = "Query1"),
convertMenuItem(menuItem("Query2",tabName="Query2",icon=icon("table"),
numericInput('Start2','Start Date',20180101,min=20170101,max=20200101),
numericInput('End2','End Date',20180101,min=20170101,max=20200101),
textInput('Office2','Office ID','0'),
submitButton("Submit")), tabName = "Query2")
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName="Query1", h2("Dashboard tab content")),
tabItem(tabName = "Query2", h2("Widgets tab content"))
)
)
ui <- dashboardPage(
dashboardHeader(title = 'LOSS PREVENTION'),
sidebar,
body
)
server <- function(input, output) {}
shinyApp(ui, server)
结果
我正在学习 shiny and shinydashboard。我的代码是这样的:
library(shiny)
library(shinydashboard)
library(DT)
library(RODBC)
library(stringr)
library(dplyr)
ch<-odbcConnect('B1P HANA',uid='fchen4',pwd='XUEqin0312')
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Query1",tabName="Query1",icon=icon("table"),
numericInput('Start1','Start Date',19800312,min=20170101,max=20200101),
numericInput('End1','End Date',19800312,min=20170101,max=20200101),
textInput('Office1','Office ID','0'),
submitButton("Submit")),
menuItem("Query2",tabName="Query2",icon=icon("table"),
numericInput('Start2','Start Date',20180101,min=20170101,max=20200101),
numericInput('End2','End Date',20180101,min=20170101,max=20200101),
textInput('Office2','Office ID','0'),
submitButton("Submit"))
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName="Query1",h2("Dashboard tab content")),
tabItem(tabName = "Query2",h2("Widgets tab content"))
)
)
ui <- dashboardPage(
dashboardHeader(title = 'LOSS PREVENTION'),
sidebar,
body
)
server <- function(input, output) {
}
shinyApp(ui, server)
仪表板如下所示:
你可以看到,当我在侧边栏中放置一些输入框时,文本无法在主要部分显示。
但是,当我的代码是这样的时候:
library(shiny)
library(shinydashboard)
library(DT)
library(RODBC)
library(stringr)
library(dplyr)
ch<-odbcConnect('B1P HANA',uid='fchen4',pwd='XUEqin0312')
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Query1",tabName="Query1",icon=icon("table")),
menuItem("Query2",tabName="Query2",icon=icon("table"))
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName="Query1",h2("Dashboard tab content")),
tabItem(tabName = "Query2",h2("Widgets tab content"))
)
)
ui <- dashboardPage(
dashboardHeader(title = 'LOSS PREVENTION'),
sidebar,
body
)
server <- function(input, output) {
}
shinyApp(ui, server)
那么结果是这样的:
你可以看到现在侧边栏没有输入,然后主栏现在有文字了。这太奇怪了。
这在目前 shinydashboard
中实际上是一件非常烦人的事情。提供了一些解决方法 here by Winston Chang, but the best solution in my opinion is this one:
基本上发生的事情是,当您将其他输入元素插入 menuItem
时,它会丢失 data-toggle
和 data-value
属性。因此,dashboardBody
中的 tabItem
不能再与 menuItem
一起 link,因此应用无法显示正文中的内容。
您可以使用自定义函数 (convertMenuItem
) 手动设置 data-toggle
和 data-value
,以便 menuItem
和 tabItem
是 link再次编辑。
代码:
library(shiny)
library(shinydashboard)
convertMenuItem <- function(mi,tabName) {
mi$children[[1]]$attribs['data-toggle']="tab"
mi$children[[1]]$attribs['data-value'] = tabName
mi
}
sidebar <- dashboardSidebar(
sidebarMenu(
convertMenuItem(menuItem("Query1",tabName="Query1",icon=icon("table"),
numericInput('Start1','Start Date',19800312,min=20170101,max=20200101),
numericInput('End1','End Date',19800312,min=20170101,max=20200101),
textInput('Office1','Office ID','0'),
submitButton("Submit")), tabName = "Query1"),
convertMenuItem(menuItem("Query2",tabName="Query2",icon=icon("table"),
numericInput('Start2','Start Date',20180101,min=20170101,max=20200101),
numericInput('End2','End Date',20180101,min=20170101,max=20200101),
textInput('Office2','Office ID','0'),
submitButton("Submit")), tabName = "Query2")
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName="Query1", h2("Dashboard tab content")),
tabItem(tabName = "Query2", h2("Widgets tab content"))
)
)
ui <- dashboardPage(
dashboardHeader(title = 'LOSS PREVENTION'),
sidebar,
body
)
server <- function(input, output) {}
shinyApp(ui, server)