una tablas tabla que obtener ejemplos datos con attribute agregar javascript angularjs charts zingchart

javascript - tablas - Quiero cambiar el gráfico para cada ciudad o subciudad seleccionada



obtener datos de una tabla html javascript (2)

Desarrollé una aplicación simple con AngularJS y quiero agregar un gráfico simple basado en este sitio web Js Charts

Este es mi data.json:

[ { "name": "city A", "elements": [ { "id": "c01", "name": "name1", "price": "15", "qte": "10" }, { "id": "c02", "name": "name2", "price": "18", "qte": "11" }, { "id": "c03", "name": "name3", "price": "11", "qte": "14" } ], "subsities": [ { "name": "sub A1", "elements": [ { "id": "sub01", "name": "nameSub1", "price": "1", "qte": "14" }, { "id": "sub02", "name": "nameSub2", "price": "8", "qte": "13" }, { "id": "sub03", "name": "nameSub3", "price": "1", "qte": "14" } ] }, { "name": "sub A2", "elements": [ { "id": "ssub01", "name": "nameSsub1", "price": "1", "qte": "7" }, { "id": "ssub02", "name": "nameSsub2", "price": "8", "qte": "1" }, { "id": "ssub03", "name": "nameSsub3", "price": "4", "qte": "19" } ] }, { "name": "sub A3", "elements": [ { "id": "sssub01", "name": "nameSssub1", "price": "1", "qte": "11" }, { "id": "sssub02", "name": "nameSssub2", "price": "2", "qte": "15" }, { "id": "sssub03", "name": "nameSssub3", "price": "1", "qte": "15" } ] } ] }, { "name": "city B", "elements": [ { "id": "cc01", "name": "name11", "price": "10", "qte": "11" }, { "id": "cc02", "name": "name22", "price": "14", "qte": "19" }, { "id": "cc03", "name": "name33", "price": "11", "qte": "18" } ] }, { "name": "city C", "elements": [ { "id": "ccc01", "name": "name111", "price": "19", "qte": "12" }, { "id": "ccc02", "name": "name222", "price": "18", "qte": "17" }, { "id": "ccc03", "name": "name333", "price": "10", "qte": "5" } ] } ]

Llamo a mis datos aquí.

angular.module(''app'', []) .controller(''MainController'', [''$scope'', ''$http'', function($scope, $http) { $http.get(''js/controllers/data.json'').then(function(response) { $scope.cities = response.data; $scope.selectedCity = $scope.cities[0]; $scope.data = $scope.selectedCity.elements; }); $scope.myJson = { "type": "line", "plotarea": { "adjust-layout":true /* For automatic margin adjustment. */ }, "scale-x": { "label": { /* Add a scale title with a label object. */ "text":"Above is an example of a category scale", }, /* Add your scale labels with a labels array. */ "labels":["name1","name2","name3"] }, "series": [ {"values":[15,18,11]},//here the prices of city selected {"values":[10,11,14]}//here the qte of city selected ] }; $scope.extractSubsities = function(itemSelected) { if (itemSelected && itemSelected.elements) { $scope.data = itemSelected.elements; } } }]);

index.html :

<body ng-controller="MainCtrl"> <select ng-model="selectedCity" ng-change="extractSubsities(selectedCity)" ng-options="item as item.name for item in cities track by item.name" ng-init="selectedCity = cities[0];extractSubsities(selectedCity)"> </select> <select ng-show="selectedCity.subsities" ng-model="selectedSubCity" ng-change="extractSubsities(selectedSubCity)" ng-options="item2 as item2.name for item2 in selectedCity.subsities track by item2.name"> <option style="" value=""></option> </select> <table> <tr ng-repeat="item3 in data track by item3.id"> <td>{{ item3.id }}</td> <td>{{ item3.name }}</td> <td>{{ item3.price }}</td> </tr> </table> <zingchart id = "myChart" zc-json = "myJson" zc-height = 500 zc-width = 600 ></zingchart> </body>

el resultado :

Quiero extraer de la ciudad del elemento de name atributo

Quiero cambiar el gráfico para cada ciudad o subciudad seleccionada. Por ejemplo, si selecciono la subciudad es sub A1 , necesito obtener un gráfico como:

Por favor, ayúdame !

ACTUALIZACIÓN

Traté de usar solo un archivo fuente de datos

[{ "type": "line", "plotarea": { "adjust-layout": true }, "scale-x": { "label": { "text": "échelle essence gazoile" }, "labels": ["sub01", "sub02", "sub02"] }, "series": [{ "values": [1, 8, 1] }, { "values": [14, 13, 14] }], "name": "city A", "elements": [{ "id": "c01", "name": "name1", "price": "15", "qte": "10" }, { "id": "c02", "name": "name2'', "price": "18, "qte": "11" }, { "id": "c03", "name": "name3", "price": "11", "qte": "14" }], "subsities": [{ "name": "sub A1", "elements": [{ "id": "sub01", "name": "nameSub1", "price": "1", "qte": "14" }, { "id": "sub02", "name": "nameSub2", "price": "8", "qte": "13" }, { "id": "sub03", "name": "nameSub3", "price": "1", "qte": "14" }] }, { "name": "sub A2", "elements": [{ "id": "ssub01", "name": "nameSsub1", "price": "1", "qte": "7" }, { "id": "ssub02", "name": "nameSsub2", "price": "8", "qte": "1" }, { "id": "ssub03", "name": "nameSsub3", "price": "4", "qte": "19" }] }, { "name": "sub A3", "elements": [{ "id": "sssub01", "name": "nameSssub1", "price": "1", "qte": "11" }, { "id": "sssub02", "name": "nameSssub2", "price": "2", "qte": "15" }, { "id": "sssub03", "name": "nameSssub3", "price": "1", "qte": "15" }] }] }, { "name": "city B", "elements": [{ "id": "cc01", "name": "name11", "price": "10", "qte": "11" }, { "id": "cc02", "name": "name22", "price": "14", "qte": "19" }, { "id": "cc03", "name": "name33", "price": "11", "qte": "18" }] }, { "name": "city C", "elements": [{ "id": "ccc01", "name": "name111", "price": "19", "qte": "12" }, { "id": "ccc02", "name": "name222", "price": "18", "qte": "17" }, { "id": "ccc03", "name": "name333", "price": "10", "qte": "5" }] }];

Llamé mis datos aquí:

angular.module(''app'', []).controller(''MainController'', [''$scope'', ''$http'', function($scope, $http) { $http.get(''js/controllers/data.json'').then(function(response) { $scope.cities = response.data; $scope.myJson=response.data; $scope.selectedCity = $scope.cities[0]; $scope.data = $scope.selectedCity.elements; }, function(error) { console.log(error); }); $scope.name = ''World''; $scope.data; $scope.extractSubsities = function(itemSelected) { if(itemSelected && itemSelected.elements){ $scope.data = itemSelected.elements; } } }]);

index.html :

<body ng-controller="MainCtrl"> <select ng-model="selectedCity" ng-change="extractSubsities(selectedCity)" ng-options="item as item.name for item in cities track by item.name" ng-init="selectedCity = cities[0];extractSubsities(selectedCity)"> </select> <select ng-show="selectedCity.subsities" ng-model="selectedSubCity" ng-change="extractSubsities(selectedSubCity)" ng-options="item2 as item2.name for item2 in selectedCity.subsities track by item2.name"> <option style="" value=""></option> </select> <table> <tr ng-repeat="item3 in data track by item3.id"> <td>{{ item3.id }}</td> <td>{{ item3.name }}</td> <td>{{ item3.price }}</td> </tr> </table> </div> <zingchart id = "myChart" zc-json = "myJson" zc-height = 500 zc-width = 600 ></zingchart> </body>

Pero aún no funciona, no pudo cargar el gráfico

Tengo como error:

TypeError: no se puede leer la propiedad ''tipo'' de undefined

ACTUALIZACIÓN 2 :

Configuré esto en un plunkr: plnkr .

ACTUALIZACIÓN 3

¿Puede decirme cómo puedo eliminar esto? Powered by ZingChart


Bueno, si te entiendo bien, entonces necesitas algo siguiente:

angular.module("myApp",[''zingchart-angularjs'']) .controller(''MainController'', [''$scope'', ''$http'', function($scope, $http) { $scope.chartBase = { "type": "line", "plotarea": { "adjust-layout": true /* For automatic margin adjustment. */ }, "scale-x": { "label": { "text": "Above is an example of a category scale" /* Add a scale title with a label object. */ }, "labels": ["name1", "name2", "name3"] /* Add your scale labels with a labels array. */ }, "series": [{ "values": [15, 18, 11] //here the prices of city selected },{ "values": [10, 11, 14] //here the qte of city selected }] }; $scope.chartData = angular.copy($scope.chartBase); $http.get(''data.json'') .then(function(response) { $scope.cities = response.data; // save the request data $scope.selectedCity = $scope.cities[0]; // select the first one $scope.changeCity(); // update chart }, function(error) { console.log(error); }); $scope.changeCity = function() { if($scope.selectedSubCity || $scope.selectedCity){ // if something has been selected $scope.data = ($scope.selectedSubCity || $scope.selectedCity).elements; // update elements field // initialize the array to be displayed in chart var labels = []; var price = { "values": [] }; var qte = { "values": [] }; // fill the arrays to be displayed from the selected city (sub city) angular.forEach($scope.data, function(item, index) { labels.push(item.name); price.values.push(item.price); qte.values.push(item.qte); }); // put selected values to the field that is used to render the chart $scope.chartData["scale-x"].labels = labels; $scope.chartData.series = [ price, qte ]; } } }]);

Modifiqué un poco tu controlador (y la página html). Aquí hay un ejemplo: plunker .

Las dificultades (como puedo ver) estaban en su archivo data.json . Tiene una estructura extraña. Combina los parámetros del gráfico y los datos en sí. (en mi ejemplo, eliminé los parámetros del gráfico y los codifiqué dentro del controlador, pero no es necesario).

Espero que ayude.


ZingChart quiere que le des valores en matrices, o una matriz de matrices si quieres que trace varias líneas en el gráfico. Sus datos se están cargando correctamente, por lo que todo lo que tiene que hacer es insertar los valores que desea en sus respectivas matrices y pasar esa matriz de matrices al gráfico.

ng-change="extractSubsities(selectedCity)" a su cuadro de selección para que actualice el gráfico cada vez que cambie la selección.

Luego, agregar un simple forEach a su función extractSubsities para generar las matrices a partir de los datos seleccionados actualmente le brinda lo que creo que está buscando.

$scope.extractSubsities = function(itemSelected) { if(itemSelected && itemSelected.elements){ $scope.data = itemSelected.elements; $scope.myData = itemSelected.elements console.log(itemSelected.elements) var price = [] var qte = [] itemSelected.elements.forEach(function(v) { price.push(v.price) qte.push(v.qte) }) $scope.myData = [price, qte] }

}

La directiva zingchart debería verse así: <zingchart id = "myChart" zc-values = "myData" zc-height = 500 zc-width = 600 ></zingchart> Plunkr: haga clic aquí