コントローラーから配列を渡す際に、配列の値がコントローラー内で更新されたときに、それが反映されない場合ディレクティブで。コントローラは、サービスから配列へのデータを取得し、その配列をディレクティブに渡して棒グラフを作成したいとします。私は以下のコードの重要な部分を入れました。角度 - コントローラーオブジェクトへの指示値のバインド
<div class="boxcontent" ng-show="dashCtrl.showProgress">
<div class="chart-holder-lg">
<canvas tc-chartjs-bar
chart-data="progress"
chart-options="options"
height="200"
auto-legend>
</canvas>
</div>
</div>
コントローラー:
angular
.module('myApp')
.controller('dashCtrl',['mySvc',
function(mySvc) {
var self = this;
this.myProgress = [];
this.getProgress = function() {
//logic must be in the service !
mySvc.getProgress().then(function(success) {
self.myProgress = mySvc.progress;
});
};
}]);
とディレクティブ:
angular
.module('myApp')
.directive('dashProgress', [function() {
return {
restrict: 'AE',
templateUrl: 'components/dashboard/progress.html',
scope: {
graphData: '@'
},
link: function(scope,el,attrs) {
scope.progress = {
labels: ['Duration','Percent'],
datasets: [
{
label: 'Duration',
data: [scope.graphData.duration]
},
{
label: 'Percent',
data: [scope.graphData.percent]
}
]
};
scope.options = { };
}
}
}]);
ここ
は私のトップレベルのHTML
<div dash-progress
graph-data="{{dashCtrl.myProgress}}">
</div>
<div>
Other Stuff
</div>
ディレクティブのマイテンプレートHTMLです
コントローラのmyProgress
オブジェクトの初期値を設定すると、ディレクティブに反映されますが、サービスからコントローラに返されるときに必要な実際の値は得られません。これに代えて、あなたのディレクティブの範囲で
私は片方向のバインディングが必要で、 '='に変更しても違いはありません。私は各タイプのスコープ設定を試しましたが、それは何の違いもないようです。 – jTrouble
$ scope。$ digest()を呼び出して指示文が再度コンパイルされるようにすることができます –