我希望Shiny应用程序能够记住在session$reload()
(刷新页面)时选择了哪个选项卡以清除所有输入除了所选当前标签的值在navbarPage()
。
想到的唯一想法,虽然我不知道如何实现这一点,但是将全局变量tabIndicator
指定为当前选项卡的值(如何获得此值?),然后刷新,rm()
除tabIndicator
以外的全局环境中的所有变量,并在selected = tabIndicator
中设置navbarPage()
。
我该如何做到这一点?
答案 0 :(得分:1)
我认为这是可行的,但却很棘手。问题是session$reload()
等同于点击浏览器中的刷新按钮,因此您正在创建新会话,并丢失所有上下文。我想你可以用某种方式使用cookie,但我建议使用actionButton
使用updateWhatever
重置所有输入,而不是实际使用session$reload()
。
答案 1 :(得分:1)
你有两个选择,两者都超出了闪亮的基础。
您可以使用Cookie。每次输入新选项卡时,都会向javascript发送消息并设置cookie。当应用初始化时,检查是否存在cookie,如果已设置,则读取其值并更改为相应的选项卡
使用shinyStore软件包,您可以利用HTML5的本地存储空间(但由于HTML5相对较新,因此无法在旧浏览器上运行)
我现在没有时间提供完整的代码,但希望这会有所帮助
答案 2 :(得分:0)
我能够使用全局变量来解决这个问题。
我将此代码放在应用的顶部(ui
和server
之前)
# Clear global environment except 'currentTab'
rm(list=setdiff(ls(), 'currentTab'))
# If current tab exists, restore to that tab. Otherwise, start at home screen
if(!exists('currentTab')){
currentTab <- 'HOMEPAGE'
}
此代码位于server
# Current tab
observe({
currentTab <<- input$navbar
})
像魅力一样工作。感谢大家的帮助。