R闪亮刷新应用程序保持相同的选项卡

时间:2017-04-28 19:18:52

标签: r shiny

我希望Shiny应用程序能够记住在session$reload()(刷新页面)时选择了哪个选项卡以清除所有输入除了所选当前标签的值在navbarPage()

想到的唯一想法,虽然我不知道如何实现这一点,但是将全局变量tabIndicator指定为当前选项卡的值(如何获得此值?),然后刷新,rm()tabIndicator以外的全局环境中的所有变量,并在selected = tabIndicator中设置navbarPage()

我该如何做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为这是可行的,但却很棘手。问题是session$reload()等同于点击浏览器中的刷新按钮,因此您正在创建新会话,并丢失所有上下文。我想你可以用某种方式使用cookie,但我建议使用actionButton使用updateWhatever重置所有输入,而不是实际使用session$reload()

答案 1 :(得分:1)

你有两个选择,两者都超出了闪亮的基础。

  1. 您可以使用Cookie。每次输入新选项卡时,都会向javascript发送消息并设置cookie。当应用初始化时,检查是否存在cookie,如果已设置,则读取其值并更改为相应的选项卡

  2. 使用shinyStore软件包,您可以利用HTML5的本地存储空间(但由于HTML5相对较新,因此无法在旧浏览器上运行)

  3. 我现在没有时间提供完整的代码,但希望这会有所帮助

答案 2 :(得分:0)

我能够使用全局变量来解决这个问题。

我将此代码放在应用的顶部(uiserver之前)

# 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
})

像魅力一样工作。感谢大家的帮助。