2015-11-19 32 views
4

我正在使用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但是無法讓它工作。

UPDATE 此屏幕截圖顯示登錄後直接發生的行爲。 Current screen after login

此屏幕截圖顯示了登錄後所需的行爲。 Desired screen after login

+0

這對我有用,你有沒有試過更新你的軟件包,如果你正在使用Rstudio做舊的經典關機並啓動? –

+0

代碼有效,但不會選擇第一個菜單項。已使用屏幕截圖更新了帖子。 – Dan

+0

這很好。我試圖用''source(mybody.r'')從另一個R文件中'讀取'正文,但它不起作用。對此有任何想法?如果不清楚,我可以提供一個例子 –

回答

2

您需要設置tabItem爲活動:

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

,它將使第一個標籤,當你動態地呈現登錄後的內容。

+0

弗朗索瓦已經有一段時間了,這讓我感到沮喪,我只是對它進行了測試,並且絕對有效。 – Dan