Мое приложение проходит через ряд панелей, где пользователь может перейти к следующей панели, нажав кнопку действия.Я бы хотел, чтобы все приложение обновлялось при переходе на другую вкладку.Это означает, что пользователь начнёт сначала с серии панелей, и все входные данные виджета будут сброшены.
Я предоставил панелям идентификаторы и пытаюсь обновить приложение, используя
shinyjs.reset = function() {history.go(0)}
в
observeEvent()
Я также попытался сбросить используемые входыв условной панели выбора и связанных входных данных виджета.Ни один из этих подходов не обновляет приложение.
library(shiny)
library(shinyjs)
#### Specify the number of pages to use
NUM_PAGES <- 2
# Define the js method that resets the page
jsResetCode <- "shinyjs.reset = function() {history.go(0)}"
# UI
ui <- navbarPage(
# Call shinyjs
useShinyjs(),
extendShinyjs(text = jsResetCode),
### Panel 1 ###
tabPanel(id = "p1",
title = "A",
"Page 1"),
### Panel 2 ###
tabPanel(id = "p2",
title = "B",
div(id = "form",
### Sub-panel 1
conditionalPanel(
condition = "input.nextBtn_1 == 0",
radioButtons(inputId ="Q1", ("Q1"), choices = c("A", "B"),
selected = character(0)),
# Next page button
div(actionButton("nextBtn_1", "Next1 >"))),
### Sub-panel 1
conditionalPanel(
# Q1
condition = "input.nextBtn_1 == 1 && input.nextBtn_2 == 0",
radioButtons(inputId ="Q2", ("Q2"),
choices = c("A", "B" , "C"),
selected = character(0)),
# Q2
radioButtons(inputId ="Q3", ("Q3"),
choices = c("A", "B"),
selected = character(0)),
# Next page button
div(actionButton("nextBtn_2", "Next2 >")))
)))
# Server
server <- function(input, output) {
# Observe event
observeEvent(input$p1, {js$reset()})
# The function for adding the page value
navPage <- function(input, direction) {
input <- input + direction
}
# When nextBtn is pressed, one is added to page number
observeEvent(input$nextBtn_1, navPage(input$nextBtn_1, 1))# navPage(1)
observeEvent(input$nextBtn_2, navPage(input$nextBtn_2, 1))# navPage(1)
}
# run
shinyApp(server = server, ui = ui)
Я ожидаю, что когда пользователь нажимает на вкладку "p1", приложение обновляется.Когда пользователь затем возвращается обратно к «p2», они начнутся на первой панели, и для виджетов ввод не будет определен.