多个 Web 应用程序 R shiny

Multiple Web application R shiny

假设我有 2 个操作按钮作为起始页 'Client' 和 'Employee',如下所示,并且对于每个选项,都有一个不同的 Web 应用程序。

当用户点击 'Client' 按钮时,我需要以下代码 运行:

library(shiny)

ui <- 
navbarPage(
"The Client Web",
tabPanel("Section1 "),
tabPanel(" Section1 2")
)

server <- function(input, output,session){

}

shinyApp(ui = ui, server = server)

当用户点击 'Employee' 按钮时,我需要以下代码 运行:

 library(shiny)

 ui <- 
 navbarPage(
 "The Employee Web",
 tabPanel("Component 1"),
 tabPanel("Component 2"),
  tabPanel("Component 3")
  )

  server <- function(input, output,session){

  }

 shinyApp(ui = ui, server = server)

我需要一个应用程序中的两个 Web 应用程序,具体取决于 'Client' 或 'Employee' 的用户类型。提前致谢!

使用JavaScript

我会使用 Javascript 代码到 hide/show 任一页面。

您必须创建带有 de 按钮和两个导航栏页面的应用程序。

library(shiny)

ui <- fluidPage(
  # Buttons
  actionButton('clientsBtn', 'Clients'),
  actionButton('employeeBtn', 'Employee'),
  
  # Employee pag
  div(
    class = 'employees-page',
    navbarPage(
      "The Employee Web",
      tabPanel("Component 1"),
      tabPanel("Component 2"),
      tabPanel("Component 3")
    )
  ),
  
  # Clients page
  div(
    class = 'clients-page',
    navbarPage(
      "The Client Web",
      tabPanel("Section1 "),
      tabPanel(" Section1 2")
    )
  ),

  # Javascript to control de page logic
includeScript('script.js')
)

server <- function(input, output,session){
  
  
}

shinyApp(ui = ui, server = server)

script.js 文件只是一个具有该扩展名的文本文件。

// hide by default the clients page
$('.clients-page').hide(); 

$('#clientsBtn').on('click', () => { 
  $('.employees-page').hide(); 
  $('.clients-page').show();
})

$('#employeeBtn').on('click', ()=>{ 
  $('.employees-page').show(); 
  $('.clients-page').hide(); 
})

个别页面使用shiny.router

正如我所承诺的,这是使用 {shiny.router} 来完成您想要的方法。


library(shiny)
library(shiny.router)

# The root page is separated from clients and employee pages
# and contains two buttons/links that takes you the destination
# you wish

root_page <- tagList(
  tags$a(
  div(class='btn btn-default', id='clientsBtn', 'Clients'),
  href=route_link('clients')
  ),
  
  tags$a(
    div(class='btn btn-default', id='employeeBtn', 'Employee'), 
    href=route_link('employees')
    )
)

# The employee and clients page should include a button/link
# to take you back to the root page. I place the button in the
# first tabpanel of each page, but for better ux is good idea
# if you place it in all of them. Consider change its style and
# position using css configuration.

employee_page <- tagList(
  navbarPage(
    "The Employee Web",
    tabPanel(
      "Component 1",
      tags$a(
        div(class='btn btn-default', id='home1', 'Home'), 
        href=route_link('/')
      )
      ),
    tabPanel("Component 2"),
    tabPanel("Component 3")
  )
)


clients_page <- tagList(
  navbarPage(
    "The Client Web",
    tabPanel(
      "Section1 ",
      tags$a(
        div(class='btn btn-default', id='home1', 'Home'), 
        href=route_link('/')
      )
      ),
    tabPanel(" Section1 2")
  )
)

router <- make_router(
  route("/", root_page),
  route("employees", employee_page),
  route("clients", clients_page)
)

ui <- fluidPage(
  router$ui
)

server <- function(input, output, session) {
  router$server(input, output, session)
}

shinyApp(ui, server)

我得到了论文结果:

当我尝试以下代码时:

library(shiny)
library(shiny.router)


Cleints_page <- div(
titlePanel("Cleints"),
p("This is the Cleints web app")
)

Employees_page <- div(
titlePanel("Employees"),
p("This is the Employees web app")
)

router <- make_router(
route("/", Cleints_page),
route("employees", Employees_page)
)


 ui <- fluidPage(
 tags$ul(
  tags$li(a(href = route_link("/"), "Cleints 
  Web")),
  tags$li(a(href = route_link("employees"), 
  "Employees Web"))
  
  ),
  router$ui
  )

  server <- function(input, output, session) {
  router$server(input, output, session)
  }

  shinyApp(ui, server)

但是,我仍然需要它们中的每一个都成为一个单独的页面。我怎样才能做到这一点?