2016-10-31 95 views
1

有沒有辦法使用updateSelectizeInput的HTML標籤(例如h6)(它正在爲selectInput工作,請參閱下面的代碼)?下面的代碼簡單地使用updateSelectizeInput [object Object]中的h6(「Label」)作爲輸出。R shiny updateSelectizeInput標籤的自定義HTML標籤

rm(list = ls()) 
library(shiny) 



ui =fluidPage(
    selectizeInput('DropDownSelectize',choices=NULL,label=""), 
    selectInput('DropDownSelect',choices = c("choice1","choice2","choice3"), 
    label=h6("Label")) 
) 

server = function(input, output, session) { 

observe({ 
    updateSelectizeInput(session, 
        'DropDownSelectize', 
         label = h6("Label"), 
         choices = c("choice1","choice2","choice3"), 
         selected = "choice1", 
         server = TRUE) 

}) 


} 
runApp(list(ui = ui, server = server)) 

感謝

+0

這很明顯看起來是一個錯誤。如果你在'as.character'中更新'h6',你會直接得到'h6'標籤。我將在github上提交bug報告 – Carl

+0

https://github.com/rstudio/shiny/issues/1451 – Carl

+0

感謝您的參與。 – ChriiSchee

回答

2

如果標籤將是始終不變的,只是不上updateSelectizeInput設置label值。實際上,你只應該設置你想改變的參數。

通過實例,這只是改變選擇的值:

updateSelectizeInput(session, 'DropDownSelectize', selected = "choice3") 

如果在這種情況下h6改變的label需求的價值,但有一個標籤或樣式一樣,你可以使用shinyjs改變只有標籤的文字。爲此,您需要將id添加到h6標籤。請參閱下面的示例,在第一個觀察者內部使用shinyjshtml函數更改標籤。我還添加了兩個按鈕來手動更改標籤的文本。

library(shiny) 
library(shinyjs) 

ui =fluidPage(
    shinyjs::useShinyjs(), # to initialize shinyjs 
    selectizeInput('DropDownSelectize',choices=NULL,label=h6("", id = "labelText")), 
    selectInput('DropDownSelect',choices = c("choice1","choice2","choice3"), 
    label=h6("Label")), 
    actionButton("useLabel1", "Use Label 1"), 
    actionButton("useLabel2", "Use Label 2") 
) 

server = function(input, output, session) { 
    observe({ 
    updateSelectizeInput(session, 
        'DropDownSelectize', 
         # label = h6("Label"), # no needed 
         choices = c("choice1","choice2","choice3"), 
         selected = "choice1", 
         server = TRUE) 
    shinyjs::html("labelText", "Label") 
    }) 

    observeEvent(input$useLabel1, { 
    shinyjs::html("labelText", "Label 1") 
    }) 

    observeEvent(input$useLabel2, { 
    shinyjs::html("labelText", "Label 2") 
    }) 

} 
runApp(list(ui = ui, server = server)) 
+0

謝謝你,太棒了。這是行得通的。 – ChriiSchee

+0

很高興知道它的工作原理。如果您認爲這是一個很好的答案,您可以考慮通過點擊複選標記來接受答案。 – Geovany