別の記事でAngularJSを使ってGoogle ChartのグラフをWordPress投稿本文に作成する方法についてまとめました。今回は、AngularJSのカスタムディレクティブを使う形に修整してみました。
ここでは下記のようにWordPress投稿本文に、”g-chart”という属性を指定してGoogle chartsの図を挿入できるカスタムディレクティブを定義します。
1)AngularJSスクリプトでカスタムディレクティブを定義
‘gChart’という名前のカスタムディレクティブを次のように定義します。
.directive('gChart', function() {
return {
restrict: 'A',
link: function($scope, elm, attrs) {
var chart = new google.visualization.PieChart(elm[0]);
chart.draw($scope.chart.data, $scope.chart.options);
}
};
・restrictでは、要素名(E)やクラス(C)も指定できますが、今回は属性として使用するので’A’を指定します。
・linkでこのカスタムディレクティブの振る舞いを定義します。
引数は下記のように利用します。
$scope:Google chartsのデータ、オプション
elm:このカスタムディレクティブの要素。ここではdiv
関数では、$scope内に設定されたGoogle chartsのデータとオプションを使って図を描画し、その図をelmの要素に埋め込みます。
2)Google chartのデータとオプションを$scopeに設定
$scopeにGoogle chartsのデータとオプションを指定します。この$scopeがカスタムディレクティブのlink関数に渡されて図の描画、挿入が行われます。
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
:
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
var chart = {};
chart.data = data;
chart.options = options;
$scope.chart = chart;
●サンプルコード全体
(gglchart2.js)
google.load('visualization', '1', {
packages: ['corechart']
});
google.setOnLoadCallback(function() {
angular.bootstrap(document.body, ['MyApp']);
});
var mymodule=angular.module('MyApp', [])
mymodule.controller('MyCtrl2', ['$scope',
function($scope) {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Topping');
data.addColumn('number', 'Slices');
data.addRows([
['Mushrooms', 3],
['Onions', 1],
['Olives', 1],
['Zucchini', 1],
['Pepperoni', 2]
]);
var options = {'title':'How Much Pizza I Ate Last Night',
'width':400,
'height':300};
var chart = {};
chart.data = data;
chart.options = options;
$scope.chart = chart;
}
]);
mymodule.directive('gChart', function() {
return {
restrict: 'A',
link: function($scope, elm, attrs) {
var chart = new google.visualization.PieChart(elm[0]);
rt_div2'));
chart.draw($scope.chart.data, $scope.chart.options);
}
};
});
(WordPress投稿本文)
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type='text/javascript' src='http://www.example.com/wp-content/themes/ang/js/gglchart2.js'></script> <div ng-controller="MyCtrl2" g-chart></div>