2016-05-07 14 views
0

に棒グラフを統合する必要があります。私は、この形式のJSONデータを持っている私のコード

angular.module('app', []).controller('MainController', ['$scope', function($scope) { 
     $scope.cities = [{ 
     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 
     }] 
     }]; 
     $scope.extractSubsities = function(itemSelected) { 
     if (itemSelected && itemSelected.elements) { 
      $scope.data = itemSelected.elements; 
     } 
     } 
    }); 

私はテーブルにそれらを置きます。

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"> 
    </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"> 
    </select> 

    <table> 
    <tr ng-repeat="item3 in data track by item3.id"> 
     <!--but here I need to iterat the selectedSubCity too when I select DropDown 2--> 
     <td>{{ item3.id }}</td> 
     <td>{{ item3.name }}</td> 
     <td>{{ item3.price }}</td> 
     <td>{{ item3.qte}}</td> 
    </tr> 
    </table> 

</body> 

今、すべてのティル私はテーブルに選択した都市やsubcityの値を入れて、私は、データが読みやすくなりすぎチャートに入れたいの権利です。このライブラリは、Chart.jsの角度指令を提供しています。jtblin.github.io/angular-chart.js/#bar-chartこれらのコード例はすべてがあります。私が必要とするのは、棒グラフを自分のコードに統合することです。私はそれを行う方法を見てみましょう:

私は、チャートライブラリをダウンロードして、これは私のアプリケーションの私の構造である:

<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"> 
     </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"> 
     </select> 

     <table> 
     <tr ng-repeat="item3 in data track by item3.id"> 
      <!--but here I need to iterat the selectedSubCity too when I select DropDown 2--> 
      <td>{{ item3.id }}</td> 
      <td>{{ item3.name }}</td> 
      <td>{{ item3.price }}</td> 
      <td>{{ item3.qte}}</td> 
     </tr> 
     </table> 
    <div ng-controller="MainCtrl"> 
    <canvas id="bar" class="chart chart-bar" 
     chart-data="data" chart-labels="labels"> chart-series="series" 
    </canvas> 
    </div> 

</body> 

とJSON次のようになります。

|--css 
    |--main.css 
|--js 
    |--chart 
     |--augular-chart.css 
     |--augular-chart.js () I think only these two files are necessary. 
    |--controllers 
      |--MainCtrl.js 
|--index.html 

のindex.htmlは次のようになり、 like:

angular.module("myApp",["chart.js"]).controller("BarCtrl", function ($scope) { 
    $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012']; 
    $scope.series = ['Series A', 'Series B']; 

    $scope.data = [ 
    [65, 59, 80, 81, 56, 55, 40], 
    [28, 48, 40, 19, 86, 27, 90] 
    ]; 
}); 

angular.module("myApp",["chart.js"]).controller('MainController', ['$scope', function($scope) { 
      $scope.cities = [{ 
      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 
      }] 
      }]; 
      $scope.extractSubsities = function(itemSelected) { 
      if (itemSelected && itemSelected.elements) { 
       $scope.data = itemSelected.elements; 
      } 
      } 
     }); 

しかし、これはすべて私と一緒には動作しません。私はそれが私にフォールドを表示するブラウザのネットワークツールを使用しますエラーのため:

-angular-chart.js:13 Uncaught ReferenceError: Chart is not defined 
-MainCtrl.js:2 Uncaught ReferenceError: controller is not defined 
-Uncaught Error: [$injector:modulerr] 
+0

あなたは私が私のhtmlコードの上にあなたの答えのための – Sajeetharan

+0

を作成することができます – Sajeetharan

+0

のあなたの完全なコードを投稿plunker – Abderrahim

答えて

0

あなたindex.htmlで二回ng-controller="MainCtrl"を定義しました?!第2に、index.htmlではMainCtrlを使用し、コントローラではMainControllerを使用します。

<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"> 
     </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"> 
     </select> 

     <table> 
     <tr ng-repeat="item3 in data track by item3.id"> 
      <!--but here I need to iterat the selectedSubCity too when I select DropDown 2--> 
      <td>{{ item3.id }}</td> 
      <td>{{ item3.name }}</td> 
      <td>{{ item3.price }}</td> 
      <td>{{ item3.qte}}</td> 
     </tr> 
     </table> 
    <div> 
    <canvas id="bar" class="chart chart-bar" 
     chart-data="data" chart-labels="labels"> chart-series="series" 
    </canvas> 
    </div> 

</body> 
+0

感謝を入れていないが、これは私の問題を解決していないだけで、スクリプトのパス@Sajeetharanあなたのhtml – Abderrahim

関連する問題