R 对menuItem()选项卡选择作出反应

R 对menuItem()选项卡选择作出反应,r,shiny,shinydashboard,R,Shiny,Shinydashboard,在shinydashboard中,可以创建menuItem()s,它们是侧边栏中的选项卡。我希望能够使用标准的input$foo语法轮询哪个选项卡处于活动状态 然而,我没能做到这一点。我尝试引用menuItem()的tabName或id,但没有任何效果 有办法吗?侧边栏菜单有可选的id参数,您可以使用它 sidebarMenu(id="menu1", menuItem("PointA_",tabName = "PointA") ) 在服务器端使用输入$menu1 完整工作

shinydashboard
中,可以创建
menuItem()
s,它们是侧边栏中的选项卡。我希望能够使用标准的
input$foo
语法轮询哪个选项卡处于活动状态

然而,我没能做到这一点。我尝试引用
menuItem()
tabName
id
,但没有任何效果


有办法吗?

侧边栏菜单
有可选的id参数,您可以使用它

sidebarMenu(id="menu1",
      menuItem("PointA_",tabName = "PointA") 
    )
在服务器端使用
输入$menu1

完整工作示例,打印
点A
点B
(点击激活)

库(闪亮)
图书馆(shinydashboard)

ui不适合我。我设置了
sidebarMenu(id=“sbmenu”),menuItem(..
,然后在
服务器中设置了
observe
observe(print(input$sbmenu))
,但是除了第一个
NULL
,没有任何东西被打印出来。是的,它可以工作!但是,如果在“PointA”中插入另一项,例如:
menuItem(“PointA”),tabName=“PointA”,selected=TRUE,checkboxInput(“tc”,“Test check”,value=FALSE))
…它不再工作了。我不确定我是否理解,但在您的示例中,当您单击一个选项卡并选择它时,它也会打印在终端上,因为
input$sbmenu
会发生变化。这就是我想要的。但是,如果您在选项卡中添加一个项目(如我之前所写的),这种情况不再发生:当您单击一个选项卡(并展开它)时,
input$sbmenu
不再更改。您只需添加
、checkboxInput(“tc”、“Test check”、value=FALSE)即可轻松验证这一点
在您的示例中。我需要选项卡来包含其他项目,并在
输入$sbmenu
中报告它们的状态。谢谢,这很好!您如何知道如何通过$children等访问menuItems?是否有任何文档?我还没有找到它。添加一些关于儿童的内容(但这只是一些想法,并不总是一个好方法)
library(shiny)
library(shinydashboard)


ui <- dashboardPage(
  dashboardHeader(
    title = "Shiny"
  ),

  dashboardSidebar(
    sidebarMenu(id="sbmenu",
      menuItem("PointA_",tabName = "PointA") ,
      menuItem("PointB_",tabName = "PointB") 
    )
  ),

  dashboardBody(
    tabItems(
      tabItem("PointA",h1("a")),
      tabItem("PointB",h1("b"))
    )
  )
)


server <- function(input, output) {
  observe(print(input$sbmenu))
}

shinyApp(ui,server)
library(shiny)
library(shinydashboard)


convertMenuItem <- function(mi,tabName) {
  mi$children[[1]]$attribs['data-toggle']="tab"
  mi$children[[1]]$attribs['data-value'] = tabName
  if(length(mi$attribs$class)>0 && mi$attribs$class=="treeview"){
    mi$attribs$class=NULL
  }
  mi
}


ui <- dashboardPage(
  dashboardHeader(
    title = "Shiny"
  ),

  dashboardSidebar(
    sidebarMenu(id="sbmenu",
                convertMenuItem(menuItem("PointA_",tabName="PointA", selected=TRUE,

                                          checkboxInput("tc", "Test check", value=FALSE)
                         ),'PointA')        ,
                convertMenuItem(menuItem("PointB_",tabName="PointB",checkboxInput("tc2", "Test check", value=FALSE)
                ),'PointB') 
    )
  ),

  dashboardBody(


    tabItems(
      tabItem("PointA",h1("a")),
      tabItem("PointB",h1("b"))
    )
  )
)


server <- function(input, output) {

  observe({
    print(input$sbmenu)

    })


}

shinyApp(ui,server)
aa=menuItem("PointA_",tabName="PointA", selected=TRUE,

         checkboxInput("tc", "Test check", value=FALSE)
)

aa1=menuItem("PointA_",tabName="PointA", selected=TRUE)

> aa
<li class="treeview">
  <a href="#shiny-tab-PointA">
    <span>PointA_</span>
    <i class="fa fa-angle-left pull-right"></i>
  </a>
  <ul class="treeview-menu">
    <div class="form-group shiny-input-container">
      <div class="checkbox">
        <label>
          <input id="tc" type="checkbox"/>
          <span>Test check</span>
        </label>
      </div>
    </div>
  </ul>
</li>
> aa1
<li>
  <a href="#shiny-tab-PointA" data-toggle="tab" data-value="PointA" data-start-selected="1">
    <span>PointA_</span>
  </a>
</li>