私は angularjs を初めて使用し、最初のディレクティブを作成しています。私はそこまでの道のりの半分を手に入れましたが、いくつかの変数をディレクティブに渡す方法を理解するのに苦労しています.
私の指示:
app.directive('chart', function () {
return{
restrict: 'E',
link: function (scope, elem, attrs) {
var chart = null;
var opts = {};
alert(scope[attrs.chartoptions]);
var data = scope[attrs.ngModel];
scope.$watch(attrs.ngModel, function (v) {
if (!chart) {
chart = $.plot(elem, v, opts);
elem.show();
} else {
chart.setData(v);
chart.setupGrid();
chart.draw();
}
});
}
};
});
私のコントローラー:
function AdListCtrl($scope, $http, $rootScope, $compile, $routeParams, AlertboxAPI) {
//grabing ad stats
$http.get("/ads/stats/").success(function (data) {
$scope.exports = data.ads;
if ($scope.exports > 0) {
$scope.show_export = true;
} else {
$scope.show_export = false;
}
//loop over the data
var chart_data = []
var chart_data_ticks = []
for (var i = 0; i < data.recent_ads.length; i++) {
chart_data.push([0, data.recent_ads[i].ads]);
chart_data_ticks.push(data.recent_ads[i].start);
}
//setup the chart
$scope.data = [{data: chart_data,lines: {show: true, fill: true}}];
$scope.chart_options = {xaxis: {ticks: [chart_data_ticks]}};
});
}
私のHTML:
<div class='row-fluid' ng-controller="AdListCtrl">
<div class='span12' style='height:400px;'>
<chart ng-model='data' style='width:400px;height:300px;display:none;' chartoptions="chart_options"></chart>
{[{ chart_options }]}
</div>
</div>
ディレクティブでにアクセス$scope.data
できますが、データにアクセスできないよう$scope.chart_options
です..定義されているように設定されています.エコーすると、ページに表示されます..
私が間違っていることはありますか?
更新:
何らかの理由で、このディレクティブをalert(scope[attrs.chartoptions]);
$watch 内に移動すると、最初に「未定義」として警告され、次に適切な値として再び警告されます。それ以外の場合は常に未定義です。グラフの描画に使用している jquery flot ライブラリに関連している可能性はありますか?
乾杯、ベン