我有一個帶有多個選項卡的閃亮應用程式,我希望在選項卡中包含允許用戶切換選項卡的操作按鈕。我找到了以下頁面:https://www.titanwolf.org/Network/q/e6b187b8-6cad-4ece-ad16-7ec73ed2f758/y 如何從模塊內部切換閃亮的標簽面板?,這似乎表明問題是范圍/命名空間錯誤,但它們并沒有完全解釋發生了什么,而且我沒有足夠的聲望點來評論另一個要求澄清的 stackoverflow 帖子。
這是我的示例代碼:
modtab1_ui <- function(id) {
ns <- NS(id)
tabPanel(title = 'Tab 1',
value = NS(id, 'tab.1'),
h4('This is the first tab'),
actionButton(NS(id, 'nexttab'), 'Next Tab')
)
}
modtab1_server <- function(id) {
moduleServer(id,
function(input, output, session) {
observeEvent(input$nexttab, {
updateTabsetPanel(session = session, inputId = NS(id, 'tabs'), selected = NS(id, 'tab.2'))
print('button clicked')
})
})
}
modtab2_ui <- function(id) {
ns <- NS(id)
tabPanel(title = 'Tab 2',
value = NS(id, 'tab.2'),
h4('This is the second tab'),
)
}
ui <- fluidPage(
tabsetPanel(
id = 'tabs',
modtab1_ui('tab1'),
modtab2_ui('tab1')
)
)
server <- function(input, output, session) {
modtab1_server('tab1')
}
shinyApp(ui = ui, server = server)
uj5u.com熱心網友回復:
我想這就是你要找的。做了兩個很小的改動!一,在modtab1_server功能,我改變了ns(id, 'tabs')只'tabs'。我認為由于 inputId 在一個模塊內,它已經添加了 id,在這種情況下意味著它添加了 tab1。使用您現有的代碼,它會說 tabsetPanel 的 id 是“tab1-tab1-tabs”我認為,因此通過洗掉ns(id)它應該將 inputId 稱為“tab1-tabs”。第二個更改是將 tabsetPanel id 設為“tab1-tabs”,以封裝模塊將“tab1”添加到 updateTabsetPanel 的 inputId 的方式。
modtab1_ui <- function(id) {
ns <- NS(id)
tabPanel(title = 'Tab 1',
value = NS(id, 'tab.1'),
h4('This is the first tab'),
actionButton(NS(id, 'nexttab'), 'Next Tab')
)
}
modtab1_server <- function(id) {
moduleServer(id,
function(input, output, session) {
observeEvent(input$nexttab, {
updateTabsetPanel(session = session, inputId = 'tabs', selected = NS(id, 'tab.2'))
print('button clicked')
})
})
}
modtab2_ui <- function(id) {
ns <- NS(id)
tabPanel(title = 'Tab 2',
value = NS(id, 'tab.2'),
h4('This is the second tab'),
)
}
ui <- fluidPage(
tabsetPanel(
id = 'tab1-tabs',
modtab1_ui('tab1'),
modtab2_ui('tab1')
)
)
server <- function(input, output, session) {
modtab1_server('tab1')
}
shinyApp(ui = ui, server = server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336904.html
