代码之家  ›  专栏  ›  技术社区  ›  Quinten

在Quarto仪表板中添加复制到剪贴板按钮

  •  2
  • Quinten  · 技术社区  · 1 月前

    我想添加一个按钮,在Quarto仪表板中复制用户的输入或输出。我找到了 shiny2clipboard 这似乎是一个不错的选择。不幸的是,我尝试运行的代码没有将文本复制到Quarto仪表板内的剪贴板。当您在链接中运行博客中的示例代码时,它确实有效,但在Quarto仪表板中无效。以下是一些可复制的代码:

    ---
    title: "Test"
    format: dashboard
    server: shiny
    ---
    
    ## Test
    
    ```{r}
    library(shiny)
    library(shinyCopy2clipboard)
    ```
    
    ```{r}
    #| title: "Text that needs to copy to clipboard"
    
    # Setup
      use_copy()
    
      # Text Input 1
      textInput("text", "Enter Your Text")
    
      # Copy Button 1
    shinyCopy2clipboard::CopyButton(
        "copybtn",
        label = "Copy to clipboard",
        icon = icon("copy"),
        text = "No Text Found"
      )
    ```
    
    
    ```{r}
    #| context: server
    observe({
    
        req(input$copybtn)
      shinyCopy2clipboard::CopyButtonUpdate(session,
                         id = "copybtn",
                         label = "Copy to clipboard",
                         icon = icon("copy"),
                         text = input$text
        )
    
      })
    ```
    

    输出:

    enter image description here

    正如您在输出中看到的,我尝试将文本从输入字段复制到剪贴板。这行不通。所以我想知道是否有人知道如何在Quarto仪表板中添加一个按钮,将文本复制到剪贴板?

    1 回复  |  直到 1 月前
        1
  •  1
  •   Jan    1 月前

    您可以定义 actionButton 其具有 onclick 活动。在那里,我们阅读了当前的文本 textInput (使用 txt = document.getElementById('text').value; )然后将其传递到剪贴板 navigator.clipboard.writeText(txt); :

    ---
    title: "Test"
    format: dashboard
    server: shiny
    ---
    
    ## Test
    
    ```{r}
    library(shiny)
    ```
    
    ```{r}
    #| title: "Text that needs to copy to clipboard"
    
    # Text Input 1
    textInput("text", "Enter Your Text")
    
    actionButton(
      "copy_link", 
      "Copy to clipboard", 
      onclick = "
        txt = document.getElementById('text').value;
        navigator.clipboard.writeText(txt);"
    )
    ```
    
    ```{r}
    #| context: server
    ```
    

    enter image description here