shinydashboard&x27;s单击时的下拉菜单事件
下面是问题和答案 我在下面创建了一个应用程序,当单击taskItem时,它会很好地打开一个sweetalertshinydashboard&x27;s单击时的下拉菜单事件,r,shiny,shinydashboard,sweetalert,R,Shiny,Shinydashboard,Sweetalert,下面是问题和答案 我在下面创建了一个应用程序,当单击taskItem时,它会很好地打开一个sweetalert library(shiny) library(shinyWidgets) library(shinydashboard) library(tidyverse) ui <- fluidPage( dashboardPage( dashboardHeader(dropdownMenuOutput("dropdownmenu")), dashbo
library(shiny)
library(shinyWidgets)
library(shinydashboard)
library(tidyverse)
ui <- fluidPage(
dashboardPage(
dashboardHeader(dropdownMenuOutput("dropdownmenu")),
dashboardSidebar(),
dashboardBody(
tags$script(HTML("function clickFunction(link){ Shiny.onInputChange('linkClicked',link);}")),
)))
server = shinyServer(function(input, output, session){
output$dropdownmenu = renderMenu({
aa <- 1:2 %>%
map(~taskItem(text = paste("This is no", .), value = ., color = c("red", "blue")[.]))
for(i in 1:length(aa)){
aa[[i]]$children[[1]] <- a(href="#","onclick"=paste0("clickFunction('",paste("This is no", i),"'); return false;"),
aa[[i]]$children[[1]]$children)
}
dropdownMenu(type = "tasks", badgeStatus = "warning",
.list = aa)
})
observeEvent(input$linkClicked, {
sendSweetAlert(
session = session,
text = input$linkClicked,
type = "info",
showCloseButton = TRUE)
})
})
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinyWidgets)
图书馆(shinydashboard)
图书馆(tidyverse)
ui你可以在rstudio网站上找到一篇关于这方面的好文章:
问题的根源:
警告:Shining只侦听消息值的更改。
因此,如果使用相同的参数调用doAwesomeThing2两次,则
第二次调用不会触发observeEvent块,因为对象
您发送的邮件没有更改
解决方案:
这可以通过添加一个随机值来克服
添加到对象,使对象作为一个整体显示为已更改
闪亮的在R中,您只需忽略对象的这一部分
因此,在您的情况下,您可以将代码更改为:
tags$script(HTML("function clickFunction(link){
var rndm = Math.random();
Shiny.onInputChange('linkClicked', {data:link, nonce: Math.random()});}"
))
对触发输入的调用将是:
input$linkClicked$data
完整可复制示例:
library(shiny)
library(shinydashboard)
library(tidyverse)
library(shinyWidgets)
ui <- fluidPage(
dashboardPage(
dashboardHeader(dropdownMenuOutput("dropdownmenu")),
dashboardSidebar(),
dashboardBody(
tags$script(HTML("function clickFunction(link){
var rndm = Math.random();
Shiny.onInputChange('linkClicked', {data:link, nonce: Math.random()});}"
)),
)))
server = shinyServer(function(input, output, session){
output$dropdownmenu = renderMenu({
aa <- 1:2 %>%
map(~taskItem(text = paste("This is no", .), value = ., color = c("red", "blue")[.]))
for(i in 1:length(aa)){
aa[[i]]$children[[1]] <- a(href="#","onclick"=paste0("clickFunction('",paste("This is no", i),"'); return false;"),
aa[[i]]$children[[1]]$children)
}
dropdownMenu(type = "tasks", badgeStatus = "warning",
.list = aa)
})
observeEvent(input$linkClicked, {
sendSweetAlert(
session = session,
text = input$linkClicked$data,
type = "info"
)
})
})
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(shinydashboard)
图书馆(tidyverse)
图书馆(shinyWidgets)
用户界面完美。很不错的!没有找到关于那个问题的帖子。