我想更改所选的每个城市或子城市的图表 [英] I want to change the chart for each city or subcity selected

查看:24
本文介绍了我想更改所选的每个城市或子城市的图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用 AngularJS 开发了一个简单的应用程序,我想基于这个网站添加一个简单的图表

我想从属性name 元素的城市中提取

我想更改所选的每个城市或子城市的图表.例如,如果我选择子城市是 sub A1 我需要得到一个图表:

请帮帮我!

更新:

我尝试只使用一个数据源文件

<代码>[{类型":线",情节区域":{调整布局":真},比例-x":{标签": {"text": "échelle 精华 gazoile"},标签":[sub01",sub02",sub02"]},系列": [{值":[1, 8, 1]}, {值":[14, 13, 14]}],"name": "A市",元素":[{"id": "c01","name": "name1","价格": "15","qte": "10"}, {"id": "c02","name": "name2',"价格": "18,"qte": "11"}, {"id": "c03","name": "name3","价格": "11","qte": "14"}],子项":[{"name": "sub A1",元素":[{"id": "sub01","name": "nameSub1","价格": "1","qte": "14"}, {"id": "sub02","name": "nameSub2","价格": "8","qte": "13"}, {"id": "sub03","name": "nameSub3","价格": "1","qte": "14"}]}, {"name": "sub A2",元素":[{"id": "ssub01","name": "nameSsub1","价格": "1","qte": "7"}, {"id": "ssub02","name": "nameSsub2","价格": "8","qte": "1"}, {"id": "ssub03","name": "nameSsub3","价格": "4","qte": "19"}]}, {"name": "sub A3",元素":[{"id": "sssub01","name": "nameSssub1","价格": "1","qte": "11"}, {"id": "sssub02","name": "nameSssub2","价格": "2","qte": "15"}, {"id": "sssub03","name": "nameSssub3","价格": "1","qte": "15"}]}]}, {"name": "B市",元素":[{"id": "cc01","name": "name11","价格": "10","qte": "11"}, {"id": "cc02","name": "name22","价格": "14","qte": "19"}, {"id": "cc03","name": "name33","价格": "11","qte": "18"}]}, {"name": "C市",元素":[{"id": "ccc01","name": "name111","价格": "19","qte": "12"}, {"id": "ccc02","name": "name222","价格": "18","qte": "17"}, {"id": "ccc03","name": "name333","价格": "10","qte": "5"}]}];

我在这里调用了我的数据:

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 = '世界';$scope.data;$scope.extractSubsities = 函数(itemSelected){if(itemSelected && itemSelected.elements){$scope.data = itemSelected.elements;}}}]);

index.html:

<select ng-model="selectedCity" ng-change="extractSubsities(selectedCity)" ng-options="item as item.name for item in city track by item.name" ng-init="selectedCity = city[0];extractSubsities(selectedCity)"></选择><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></选择><表格><tr ng-repeat="item3 in data track by item3.id"><td>{{ item3.id }}</td><td>{{ item3.name }}</td><td>{{ item3.price }}</td></tr>

<zingchart id = "myChart" zc-json = "myJson" zc-height = 500 zc-width = 600 ></zingchart>

但是还是不行,无法加载图表

我有一个错误:

<块引用>

TypeError: 无法读取未定义的属性类型"

更新 2:

我在 plunkr 中进行了设置:

解决方案

好吧,如果我理解您的意思,那么您需要以下内容:

angular.module("myApp",['zingchart-angularjs']).controller('MainController', ['$scope', '$http', function($scope, $http) {$scope.chartBase = {类型":线",情节区域":{"adjust-layout": true/* 用于自动边距调整.*/},比例-x":{标签": {"text": "上面是一个类别比例的例子"/* 添加一个带有标签对象的比例标题.*/},"labels": ["name1", "name2", "name3"]/* 添加带有标签数组的比例标签.*/},系列": [{"values": [15, 18, 11]//这里是所选城市的价格},{"values": [10, 11, 14]//这里选择的城市数量}]};$scope.chartData = angular.copy($scope.chartBase);$http.get('data.json').then(功能(响应){$scope.cities = response.data;//保存请求数据$scope.selectedCity = $scope.cities[0];//选择第一个$scope.changeCity();//更新图表}, function(error) { console.log(error);});$scope.changeCity = function() {if($scope.selectedSubCity || $scope.selectedCity){//如果已经选择了某些东西$scope.data = ($scope.selectedSubCity || $scope.selectedCity).elements;//更新元素字段//初始化要在图表中显示的数组var 标签 = [];无功价格 = {价值观":[]};var qte = {价值观":[]};//从选中的城市(子城市)填充要显示的数组angular.forEach($scope.data, function(item, index) {标签.push(item.name);price.values.push(item.price);qte.values.push(item.qte);});//将选定的值放入用于呈现图表的字段$scope.chartData["scale-x"].labels = 标签;$scope.chartData.series = [ 价格, qte ];}}}]);

我对您的控制器(和 html 页面)进行了一些修改.这是一个示例 - plunker.

困难(如我所见)在您的 data.json 文件中.它有一个奇怪的结构.它结合了图表参数和数据本身.(在我的示例中,我从中删除了图表参数并将它们硬编码到控制器中.但这不是必需的).

希望它会有所帮助.

I developed a simple application with AngularJS and I want to add a simple chart based on this website Js Charts

This is my 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"
            }
        ]
    }
]

I call my data here.

 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>

the result:

I want to extract from the the attribute name element's city

I want to change the chart for each city or subcity selected. For example if I select the subcity is sub A1 I need to get a chart like :

Please help me !

UPDATE :

I tried to use only one source file of data

[{
        "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"
        }]
      }];

I called my data here :

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>

But still doesn't work it couldn't load the chart

I have as an error :

TypeError: Cannot read property 'type' of undefined

UPDATE 2 :

I set this up in a plunkr: plnkr.

UPDATE 3

Please can you tell me how can I remove this Powered by ZingChart

解决方案

Well, If I understand you right then you need something following:

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

I modified a bit you controller (and html page). Here is an example - plunker.

The difficulties (as I can see) were in your data.json file. It has a weird structure. It combines the chart parameters and the data itself. (in my example I removed chart parameters from it and hardcoded them inside the controller. but it's not necessary).

Hope it will help.

这篇关于我想更改所选的每个城市或子城市的图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆