【问题标题】:dynamic body in shiny dashboard闪亮仪表板中的动态车身
【发布时间】:2015-11-19 03:11:01
【问题描述】:

我正在使用 R/shinydasboard 创建一个 Web 应用程序,并将其放在登录屏幕后面。

我无法根据侧边栏菜单选项卡渲染主体。

我已尝试确保其中一个标签项具有selected = TRUE 仍然无济于事。

示例代码如下:

require(shiny)
require(shinydashboard)

Logged <- FALSE;
LoginPass <- 0; #0: not attempted, -1: failed, 1: passed

login <- box(title = "Login",textInput("userName", "Username (user)"),
             passwordInput("passwd", "Password (test)"),
             br(),actionButton("Login", "Log in"))

loginfail <- box(title = "Login",textInput("userName", "Username"),
                 passwordInput("passwd", "Password"),
                 p("Username or password incorrect"),
                 br(),actionButton("Login", "Log in"))

mainbody <- div(tabItems(
  tabItem(tabName = "t_item1", box(title = "Item 1 information")),
  tabItem(tabName = "t_item2", box(title = "Item 2 information")),
  tabItem(tabName = "t_item3", box(title = "Item 3 information"))
)
)

header <- dashboardHeader(title = "dashboard header")

sidebar <- dashboardSidebar(uiOutput("sidebarpanel"))

body <- dashboardBody(uiOutput("body"))

ui <- dashboardPage(header, sidebar, body)

server <- function(input, output, session) {
  USER <<- reactiveValues(Logged = Logged, LoginPass = LoginPass)
  observe({
    if (USER$Logged == FALSE) {
      if (!is.null(input$Login)) {
        if (input$Login > 0) {
          username <- isolate(input$userName)
          password <- isolate(input$passwd)
          #Id.username <- which(my_username == Username)
          if (username == "user" & password == "test") {
            USER$Logged <<- TRUE
            USER$LoginPass <<- 1
          }
          USER$LoginPass <<- -1
        }
      }
    }
  })

  output$sidebarpanel <- renderUI({
    if (USER$Logged == TRUE) {
      div(
        sidebarMenu(
          menuItem("Item 1", tabName = "t_item1", icon = icon("line-chart"), selected = TRUE),
          menuItem("Item 2", tabName = "t_item2", icon = icon("users")),
          menuItem("item 3", tabName = "t_item3", icon = icon("dollar"))
        )
      )}
  })
  output$body <- renderUI({
    if (USER$Logged == TRUE) {
      mainbody
    }
    else {
      if(USER$LoginPass >= 0) {
        login
      }
      else {
        loginfail
      }
    }
  })
}

shinyApp(ui, server)

任何关于如何让主体在加载时显示其中一个选项卡的建议将不胜感激。我怀疑这可能是由于sidebarbody 的加载顺序造成的,但我不知道如何进一步调查。

我也尝试了conditionalPanel,但也无法正常工作。

更新 此屏幕截图显示了登录后立即发生的行为。

此屏幕截图显示了登录后所需的行为。

【问题讨论】:

  • 这对我有用,您是否尝试过更新您的软件包,如果您使用 Rstudio 执行旧的经典关闭和启动?
  • 代码有效,但是它没有选择第一个菜单项。已使用屏幕截图更新帖子。
  • 这很好。我正在尝试使用source(mybody.r 从另一个 R 文件中“读取”正文,但它不起作用。对此有什么想法吗?如果不清楚,我可以举个例子。
  • @Tim_Utrecht 尝试使用source(mybody.r, local = TRUE)

标签: r shiny shinydashboard


【解决方案1】:

您需要将tabItem 设置为活动状态:

tabItem(tabName = "t_item1", class = "active", box(title = "Item 1 information"))

当你登录后动态渲染内容时,它会渲染第一个标签。

【讨论】:

  • 弗朗索瓦已经有一段时间了,我没有注意到这件事。我刚刚对其进行了测试,并且绝对是一种享受。
猜你喜欢
  • 2019-07-26
  • 2015-04-22
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
  • 2020-05-23
  • 2019-06-20
  • 2016-05-02
相关资源
最近更新 更多