R闪亮的AngularJS正在工作

irJ*_*JvV 4 javascript r d3.js angularjs shiny

我正在创建一个仪表板,R和D3运行库(闪亮).

这非常好用,现在我想将D3代码转换为模块化对象,这将为我节省大量编码并使其可供其他人使用.我的想法是达到这个目的:

<r-d3-gauge id="G1" data="[1,2,3]"></r-d3-gauge>
<r-d3-gauge id="G2" data="[4,5,6]"></r-d3-gauge>
Run Code Online (Sandbox Code Playgroud)

我有两个可以用CSS定位的仪表,或者只是用HTML(....)注入它们.好吧,使用AngularJS应该很简单.

但我无法让AngularJS在R闪亮中工作.我制作了这个测试代码:(带有d3.js的www文件夹和server.r/ui.r旁边的angular.min.1.4.3.js)

ui.r

library(shiny)

shinyUI(fluidPage(
  tags$head(tags$script(src = "d3.js"))
  ,tags$head(tags$script(src = "angular.min.1.4.3.js"))
  ,htmlOutput("JS")
  ,htmlOutput("HTML")
))
Run Code Online (Sandbox Code Playgroud)

server.r

library(shiny)

shinyServer(function(input, output) {
# HTML
 output$HTML <- renderUI({
  html <- ''
  html <- paste0(html,'
   <p>Input something in the input box:</p>
   <h4>Name: <input type="text" ng-model="name"></h4>
   <h4 ng-bind="name"></h4>
   <h4>Name: <input type="text" ng-model="name2"></h4>
   <h4>You wrote: {{name2}}</h4>
  ')
  HTML(html)
 })

# JS
 output$JS <- renderUI({
  html <- "<script language='JavaScript'>"
  html <- paste0(html,'
   if(typeof angular == "undefined") {
    console.log("angular == undefined");
   } else {
    console.log("angular == defined");
    console.log(angular.version.full)
   }
   if (window.jQuery) {  
    console.log("jQuery == defined");
    console.log(jQuery.fn.jquery);
   } else {
    console.log("jQuery == undefined");
   }
  d3.select("body")
    .attr("ng-app","")
  $(document).ready(function(){
    $("p").click(function(){
     $(this).hide();
    });
  });
  </script>')
 HTML(html)
})
})
Run Code Online (Sandbox Code Playgroud)

这创建了一个闪亮的应用程序与HTML代码很好,测试显示

angular == defined
1.4.3
jQuery == defined
2.1.4
Run Code Online (Sandbox Code Playgroud)

那没问题.jQuery工作正常(你可以点击"在输入框中输入内容:"并且它是隐藏的)但如果我输入文本它不会显示.如果我尝试类似的东西:

<p>Name: <input type="text" ng-model="name2"></p>
<p>You wrote: {{ name2 }}</p> 
Run Code Online (Sandbox Code Playgroud)

它会显示:{{name2}}而没有对{{name2}}部分进行子集化.

irJ*_*JvV 9

好的,这有效:

ui.r

library(shiny)
shinyUI(bootstrapPage(includeHTML("static.html")))
Run Code Online (Sandbox Code Playgroud)

server.r

library(shiny)
shinyServer(function(input, output) {})
Run Code Online (Sandbox Code Playgroud)

static.html

<!DOCTYPE HTML>
<html>
  <head>
    <script src="http://d3js.org/d3.v3.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>  
  </head>  
  <body>
    <script language='JavaScript'>

      if(typeof angular == "undefined") {
        console.log("angular == undefined");
      } else {
        console.log("angular == defined");
        console.log(angular.version.full)
      }

      if (window.jQuery) {  
        console.log("jQuery == defined");
        console.log(jQuery.fn.jquery);
      } else {
        console.log("jQuery == undefined");
      }

      d3.select("body").attr("ng-app","")
    </script>

      <p>Input something in the input box:</p>
      <p>Name: <input type="text" ng-model="name"></p>
      <p ng-bind="name"></p>
      <h4>Name: <input type="text" ng-model="name2"></h4>
      <h4>You wrote: {{name2}}</h4>

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

瞧瞧,跑起来!:^)

  • @Taylor 刚刚用最新版本的 R 测试了代码,它对我也不起作用 =^(。我离开了 Rshiny/Angular 方法,现在在 R Shiny 之上用 Javascript 编写所有内容。一些 javascript 库与 R 发生冲突我猜是闪亮的引导。 (2认同)
  • @Taylor,小心 jquery,Shiny 引导程序也使用 jquery。如果您查看闪亮网页的加载(请参阅开发人员工具),您会发现这一点。我也加载 jquery,但加载顺序非常重要。 (2认同)