r - 关于使用 outputUI 进行闪亮的分支处理
问题描述
我们目前正在开发闪亮的APP。当从 pickerinput 中选择选项 A 或选项 B 如果选择选项 A,则会打开一个打开文件对话框。然后选择文本文件。当我选择一个文本文件时,我希望显示文本文件的标题。
当我选择 OptionB 时,我什么都不显示,什么也不做。
我写了一个示例代码。
library(shiny)
library(shinyWidgets)
library(shinyFiles)
ui <- fluidPage(
pickerInput(
inputId = "Pi1",
label = "SELECT!!",
choices = list(c("OptionA"),
c("OptionB")),
options = list(`actions-box` = TRUE,size = 7),
multiple = FALSE,
),
uiOutput("button"),
uiOutput("Message")
)
server <- function(input, output, session) {
OutputUi_func(input,output)
observeEvent(input$file, {
volumes <- c("Documents"=Sys.getenv("HOME"))
shinyFileChoose(input,'file', session=session,roots=volumes, filetypes=c('', 'txt'))
if(length(input$file) <= 1) return({})
fname <- unlist(input$file)
fname <- c(fname[2][1])
ftitle <- "FileName:"
fname <- paste0(ftitle,fname)
output$filename <- renderText({
paste0(fname)
})
})
}
OutputUi_func <- function(input,output){
output$button <- renderUI({
req(input$Pi1)
if(input$Pi1 %in% c("OptionA")){
shinyFilesButton('file', 'Read File', 'select file', FALSE)
}else return(NULL)})
output$Message <- renderText({
req(input$Pi1)
if(input$Pi1 %in% c("OptionA")){
textOutput("filename")
}else return(NULL)})
}
shinyApp(ui, server)
代码有问题。
・当我执行代码时,我得到一个关于“cat”的错误。
・即使您选择文本文件,也不显示文件标题。
我应该怎么做才能避免以上两个错误?
解决方案
尝试 :
library(shiny)
library(shinyWidgets)
library(shinyFiles)
ui <- fluidPage(
pickerInput(
inputId = "Pi1",
label = "SELECT!!",
choices = list(c("OptionA"),
c("OptionB")),
options = list(`actions-box` = TRUE,size = 7),
multiple = FALSE,
),
uiOutput("button"),
uiOutput("Message")
)
server <- function(input, output, session) {
OutputUi_func(input,output)
observeEvent(input$file, {
if(input$Pi1 %in% "OptionB") return(NULL)
volumes <- c("Documents"=Sys.getenv("HOME"))
shinyFileChoose(input,'file', session=session,roots=volumes, filetypes=c('', 'txt'))
if(length(input$file) <= 1) return(NULL)
output$Message <- renderText({
if(length(input$file) <= 1 || input$Pi1 %in% "OptionB") return(NULL)
sprintf("FileName:%s", unlist(input$file$files)[[3]])
})
})
}
OutputUi_func <- function(input,output){
output$button <- renderUI({
if(input$Pi1 %in% "OptionA")
shinyFilesButton('file', 'Read File', 'select file', FALSE)
else return(NULL)
})
}
shinyApp(ui, server)
推荐阅读
- laravel - Laravel 雄辩的关系多对一不起作用
- angular - 每个页面上出现的父组件样式
- azure - 如何在 azure PowerShell 中修复此错误:“无法删除标记/标记值,因为它正被其他资源引用。”
- mysql - 如何从“分组依据”方法中查找前 N 条记录,其中 N 条记录可以包含多个值?
- javascript - 如何在刻度之间设置相等的宽度 - chartjs
- vue.js - VueJS 从 AJAX 调用加载数据并将其传递给没有 v-if 的子组件
- javascript - React 应用程序:来自 firebase 的图像未显示在页面上
- reactjs - 导航到诸如“/annotationsList/:id”之类的 URL 时出现问题
- html - 居中表格
- maven - 如何将一个存储库项目 jar 包含到另一个存储库项目中