graphs ggplot d3js javascript angularjs r d3.js shiny

javascript - ggplot - interactive graphics r



R brillante AngularJS trabajando (1)

OK, esto funciona:

ui.r

library(shiny) shinyUI(bootstrapPage(includeHTML("static.html")))

server.r

library(shiny) shinyServer(function(input, output) {})

static.html

<script src="d3.js"></script> <script src="angular.min.1.4.3.js"></script> <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>

Et voila, ¡listo! : ^)

Estoy creando un tablero con R y D3 corriendo con la biblioteca (brillante).

Esto funciona maravillosamente bien y ahora quiero convertir el código D3 en objetos modulares que me ahorrarán mucha codificación y la podrán usar otros. Mi idea es llegar a esto:

<r-d3-gauge id="G1" data="[1,2,3]"></r-d3-gauge> <r-d3-gauge id="G2" data="[4,5,6]"></r-d3-gauge>

Y tengo los dos medidores que puedo colocar con CSS o simplemente inyectarlos en brillante con HTML (....). Ok esto debería ser simple usando AngularJS.

Pero no puedo hacer que AngularJS funcione en R brillante. Hice este código de prueba: (una carpeta www con d3.js y angular.min.1.4.3.js junto a server.r / ui.r)

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") ))

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) }) })

Esto crea una aplicación brillante con código html que está bien, la prueba muestra que

angular == defined 1.4.3 jQuery == defined 2.1.4

Así que no hay problema allí. jQuery funciona bien (puede hacer clic en "Ingresar algo en el cuadro de entrada:" y está oculto) pero si ingreso texto, no aparece. Si intento algo como:

<p>Name: <input type="text" ng-model="name2"></p> <p>You wrote: {{ name2 }}</p>

se mostrará. Escribiste: {{name2}} sin subconjunto de la parte de {{name2}}.