モジュールを使用して別のタブのUIコンテンツを表示するアプリケーションを開発しています。しかし、モジュールがメイン(または親)アプリと通信していないようです。適切なUIを表示しますが、actionButton
がクリックされたときにobserveEvent
関数を実行することはできません。現在のタブを更新し、2番目のタブを表示する必要があります。observeEventモジュールで使用されるシャイニー関数が機能しない
私のコードでは、名前空間関数を作成してactionButton
のIDをns()
にラップしましたが、それでも動作しません。誰が何が間違っているのか分かっていますか?
library(shiny)
moduleUI <- function(id){
ns <- NS(id)
sidebarPanel(
actionButton(ns("action1"), label = "click")
)
}
module <- function(input, output, session){
observeEvent(input$action1, {
updateTabItems(session, "tabsPanel", "two")
})
}
ui <- fluidPage(
navlistPanel(id = "tabsPanel",
tabPanel("one",moduleUI("first")),
tabPanel("two",moduleUI("second"))
))
server <- function(input, output, session){
callModule(module,"first")
callModule(module,"second")
}
shinyApp(ui = ui, server = server)
はあなたの助けのshosacoをありがとう、私は今何が起こっているのかをより良く理解しています。しかし、このソリューションは一度しか動作しないようです。ボタンをクリックして最初のタブに戻り、それを再度クリックしても何も起こりません。 – MaxPlank
はい、それはほんの少しの例でしたが、開いているタブを「2」に変更してしまいました。それに応じて私の例を更新しましたトリック:モジュールに現在開いているタブ( '$ tabPanel'の入力)に関する情報を与えますが、これは反応的なものとしてラップする必要があります。私は' tabsPanel'と呼んでいます。モジュールは 'tabsPanel()'を呼び出すことによって常に開いているタブを知ることができます。ここで説明します:https://www.rstudio.com/resources/webinars/understanding-shiny-modules/(約42:15) – shosaco
私のコードに入力$ tabsPanelを実装することができないので、アプリケーションは常に知っています。それはどのタブです。あなたの例では、ボタンを1回クリックしてから最初のタブに戻ると、ボタンを使用しないと、アプリケーションはあなたが新しいタブに入っていることを知らず、ボタンは機能しません。私は、どのタブが開いているかをいつでも知ることができるかどうかを知る方法を知らない。 – MaxPlank