r - R - 使用 GoogleSignIn 和 ObserveEvent
问题描述
我正在尝试将 Google 登录添加到闪亮的应用程序。我正在使用 googleAuthR 包进行签名,并且我想在用户单击“登录”时触发一些事件。但是,当我单击“登录”按钮时,我没有触发 ObserveEvent。
下面是一个代码示例。当我单击“登录”时,我希望打印出“This works”。
library(shiny)
library(googleAuthR)
options(shiny.port=3694)
options(googleAuthR.webapp.client_id = "...")
ui <- fluidPage(
titlePanel("Sample Google Sign-In"),
sidebarLayout(
sidebarPanel(
googleSignInUI("demo")
),
mainPanel(
with(tags, dl(dt("Name"), dd(textOutput("g_name")),
dt("Email"), dd(textOutput("g_email")),
dt("Image"), dd(uiOutput("g_image")) ))
)
)
)
server <- function(input, output, session) {
sign_ins <- shiny::callModule(googleSignIn, "demo")
output$g_name = renderText({ sign_ins()$name })
output$g_email = renderText({ sign_ins()$email })
output$g_image = renderUI({ img(src=sign_ins()$image) })
observeEvent(input$demo, {
print(paste("This works!"))
})
}
# Run the application
shinyApp(ui = ui, server = server)
任何帮助,将不胜感激。谢谢!
解决方案
您需要 theobserveEvent
以某种方式依赖于sign_ins()
响应式,因此observe()
with areq()
可以实现您的要求。这input$demo
是模块名称,而不是模块内的输入,因此不会给您工作的信号。以下作品:
library(shiny)
library(googleAuthR)
options(googleAuthR.webapp.client_id = "xxx")
ui <- fluidPage(
titlePanel("Sample Google Sign-In"),
sidebarLayout(
sidebarPanel(
googleSignInUI("demo")
),
mainPanel(
with(tags, dl(dt("Name"), dd(textOutput("g_name")),
dt("Email"), dd(textOutput("g_email")),
dt("Image"), dd(uiOutput("g_image")) ))
)
)
)
server <- function(input, output, session) {
sign_ins <- shiny::callModule(googleSignIn, "demo")
output$g_name = renderText({ sign_ins()$name })
output$g_email = renderText({ sign_ins()$email })
output$g_image = renderUI({ img(src=sign_ins()$image) })
observe({
req(sign_ins()$name)
print("This works")
})
}
# Run the application
shinyApp(ui = ui, server = server)
推荐阅读
- c# - 在新的 .Net 标准 Azure API - Microsoft.Azure.Servicebus 中使用 QueueClient 时,有什么方法可以绕过代理?
- c# - 获取 findMeetingTimes POST WebRequest
- c# - 如何禁用 ComboBox 中的第一个选项?
- multithreading - Dart 是单线程的,但为什么它使用 Future Objects 并执行异步操作
- javascript - 使用 javascript 样式的 JSON 到 CSV 转换器
- c++ - “input.length();”的目的是什么?
- swift - 后台运行定时器 swift
- java - Netbeans 8.2 上的 BambooBSC(平衡计分卡)设置
- python - python3:select() 在 UNIX FIFO 中的行为很奇怪
- android - OkHttpClient 自签名证书