2017-04-14 8 views
0

私はボタンがを押され、変数の条件が満たされた場合のみ、BSのモーダルを表示する必要があります。ブートストラップモーダル複数の条件Rシャイニー

これは、課題が何であるかを示す簡単なアプリです。 num_rows >= 500と送信ボタンが起動したときだけでなく、送信ボタンが押されたときにBSモーダルを表示する必要があります。

私はこれが条件の一つとしてinput.sliderを使用してconditionalPanelで行うことができる承知していますが、私の実際のプロジェクトでは、それははるかに複雑これ以上あり、かつBSモーダル/条件付きパネルは(ボタンの両方に依存する必要がありますユーザー入力)とserverに割り当てられた変数です。

library(shiny) 
library(shinyBS) 

data = matrix(rnorm(1000*10, 0, 1), nrow = 1000) 

ui <- fluidPage(
    fluidRow(
    column(width = 4, 
      sliderInput("slider", "Choose Number of Rows to Display", 0, 1000, value = NULL), 
      submitButton('Submit'), 
      bsModal("modalExample", "Yes/No", "submit", size = "small", wellPanel(
      p(div(HTML("<strong>Warning: </strong> you have chosen to display a large 
         number of rows. Are you sure you want to proceed?"))), 
      actionButton("no_button", "Yes"), 
      actionButton("yes_button", "No") 
      )) 
    ), 
    column(width = 8, 
      tableOutput('data') 
    ) 
) 
) 

server <- shinyServer(function(input, output, server){ 
    observe({ 
    num_rows <- input$slider 

    if(num_rows >= 500){ 
     # 
     # ACTIVATE MODAL PANEL 
     # 
     observeEvent(input$no_button, { 
     # Do not show table 
     }) 
     observeEvent(input$yes_button, { 
     output$table <- renderTable(data) 
     }) 
    } else{ # Display table normally if number of rows is less than 500 
     output$table <- renderTable(data) 
    } 
    }) 

}) 


shinyApp(ui, server) 
+0

をその、plsは共有のための解決策を見つけた場合はこれがサイドコメントです:2016年10月& 'modalDialog'と' showModal'のような光沢のある0.14、光沢のある申し出機能するので。私がここに投稿した例を見てくださいhttp://stackoverflow.com/questions/43408022/fileinput-button-with-selectinput-in-shiny。あなたのようにshinyBSライブラリを使っても大丈夫ですが、私は個人的には光っているネイティブ関数を使うのがアプリにとって安全だと考えています。 – Enzo

答えて

1

次のコードを見てください。パッケージshinyjsでnum_rows<500の場合は、アクションボタンを無効にしました。 num_rows>=500の場合、アクションボタンがポップアップをトリガーするために使用可能になります。スライダーで選択した行の数を更新するには、毎回「送信」ボタンを押す必要があります。これが助けてくれるか、あなたにいくつかのアイデアが得られたらいいなあ今のところ私はあなたの警告メッセージを実装していない(それは私にとってはうまくいかなかった)。もう1つの問題:ポップアップのスライダとディスプレイは、後で減少するのではなく、増加する行数に向かってのみ機能します。あなたは)=

library(shiny) 
library(shinyBS) 
library(shinyjs) 

data = matrix(rnorm(1000*10, 0, 1), nrow = 1000) 

data1=data[(1:500),] 
head(data) 
ui <- fluidPage(
    fluidRow(
    column(width = 4, 
      sliderInput("slider", "Choose Number of Rows to Display", 0, 1000, value = NULL), 
      submitButton('Submit'), 
      actionButton('Show','Show'), 
      useShinyjs(), 
      bsModal("modalExample",'Yes/No','Show', size = "large",tableOutput("tab") 
#     wellPanel(
#    p(div(HTML("<strong>Warning: </strong> you have chosen to display a large 
#       number of rows. Are you sure you want to proceed?") 
#     ))) 
       )), 
    column(width = 8,tableOutput('table')))) 

server <- function(input, output)({ 
observe({ 
    num_rows = input$slider 

if(num_rows<500 &num_rows!=0) { 
    shinyjs::disable('Show') 
output$table <- renderTable({ 
    data = data1[(1:num_rows),] 
    print(head(data1)) 
    data}) 
}else{ 
    shinyjs::enable('Show') 
output$tab = renderTable({ 
    data = data[(1:num_rows),] 
    data}) } 

}) 
}) 

shinyApp(ui, server)