R:如何根据服务器中的条件隐藏tabPanel
我修改了中给出的答案,使用R中的包编写了一个非常简单的登录/注销系统。如果USER$Logged为FALSE(即USER已注销),我想隐藏面板“B”,并在USER$Logged为TRUE(即USER已登录)时显示它。换句话说,一旦运行代码,它就不应该显示面板B,直到用户正确输入用户名和密码。我试图使用conditionalPanel,但它并没有隐藏面板B。不管用户$Logged如何,它当前一直显示面板B。有人知道怎么修吗R:如何根据服务器中的条件隐藏tabPanel,r,shiny,tabpanel,R,Shiny,Tabpanel,我修改了中给出的答案,使用R中的包编写了一个非常简单的登录/注销系统。如果USER$Logged为FALSE(即USER已注销),我想隐藏面板“B”,并在USER$Logged为TRUE(即USER已登录)时显示它。换句话说,一旦运行代码,它就不应该显示面板B,直到用户正确输入用户名和密码。我试图使用conditionalPanel,但它并没有隐藏面板B。不管用户$Logged如何,它当前一直显示面板B。有人知道怎么修吗 library(shiny) library(shinydashboard
library(shiny)
library(shinydashboard)
my_username <- "test"
my_password <- "abc"
shinyApp(
shinyUI(
navbarPage( tabPanel("A", uiOutput('loginpage')),
tabPanel("B", uiOutput('page1'),conditionalPanel(condition = "output.cond1==TRUE"))
)
),
shinyServer(function(input, output, session) {
USER <<- reactiveValues(Logged = FALSE)
observe({
if (USER$Logged == FALSE) {
output$loginpage <- renderUI({
box(title = "",textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),
actionButton("Login", "Log in"))})
} else if (USER$Logged == TRUE) {
output$loginpage <- renderUI({fluidPage(
box(title = "",br(),br(),actionButton("logout", "Logout"))
)
})
}
})
observeEvent(input$Login, {
if (!is.null(input$Login)) {
if (input$Login > 0) {
Username <- isolate(input$userName)
Password <- isolate(input$passwd)
Id.username <- which(my_username == Username)
Id.password <- which(my_password == Password)
if (length(Id.username) > 0 & length(Id.password) > 0) {
if (Id.username == Id.password) {
USER$Logged <<- TRUE
}
}
}
}
})
observeEvent(input$logout, {
USER$Logged <<- FALSE
})
output$cond1 = reactive({
USER$Logged==TRUE
})
} ))
库(闪亮)
图书馆(shinydashboard)
my_username您可以使用shinyjs
包来显示/隐藏选项卡。为此,我在导航栏中添加了id
,以便选择要显示/隐藏的选项卡。您可以在observe
中添加shinyjs::show/hide
,以在用户登录或注销时显示或隐藏选项卡。最后一个注意事项是,您需要在UI中的某个地方调用useShinyjs()
,以便这些函数能够正常工作。我还对你的代码做了一些小的修改(例如,去掉Hi,你的答案对我很有帮助,但是在隐藏之前B选项卡面板很短的时间内是可见的。有没有办法跳过这个?
library(shinyjs)
shinyApp(
shinyUI(
navbarPage( id = "navbar",
useShinyjs(),
tabPanel("A", uiOutput('loginpage')),
tabPanel("B", uiOutput('page1'),conditionalPanel(condition = "output.cond1==TRUE"))
)
),
shinyServer(function(input, output, session) {
USER <- reactiveValues(Logged = FALSE)
observe({
if (USER$Logged == FALSE) {
output$loginpage <- renderUI({
box(title = "",textInput("userName", "Username"),
passwordInput("passwd", "Password"),
br(),
actionButton("Login", "Log in"))})
shinyjs::hide(selector = "#navbar li a[data-value=B]")
} else if (USER$Logged == TRUE) {
output$loginpage <- renderUI({fluidPage(
box(title = "",br(),br(),actionButton("logout", "Logout"))
)})
shinyjs::show(selector = "#navbar li a[data-value=B]")
}
})
observeEvent(input$Login, {
Id.username <- which(my_username == input$userName)
Id.password <- which(my_password == input$passwd)
if(Id.username & Id.password) USER$Logged <<- TRUE
})
observeEvent(input$logout, {
USER$Logged <- FALSE
})
}))