我有两个angularjs指令,如下面的
<div class="well well-sm">
<datepickcalendar processchange="getSummaryForGivenMonth(sD,eD)"></datepickcalendar>
<barpiechart datavar="Summary"></barpiechart>
</div>
我显示一个条形图和饼图(barpiechart指令),并在顶角显示日期选择器(datepickcalender指令)。 在页面加载时,我将当前月份的数据显示为图表(来自控制器,我填充'摘要'和barpiechart的链接功能绘制图表。)
现在,当我使用日期选择器选择日期范围时,控制器会使用新值填充“摘要”,但不会刷新barpiechart。 在谷歌搜索后,我发现link()函数只被调用一次。所以barpiechart只用当月的数据绘制一次。
再次谷歌搜索几天后,我找到了一个令人耳目一新的工作解决方案 一个。填充'Summary'后,控制器函数中的$ scope.apply() 湾$ scope。$ watch在barpiechart指令的链接功能
控制器
function getSummaryForGivenMonth(sD, eD) {
$scope.Summary = [
...
];
$scope.$apply();
}
指令
app.directive('barpiechart', function () {
var directive = {};
directive.restrict = 'E';
directive.scope = {
values: "=datavar",
};
directive.link = function ($scope, element, attributes) {
$scope.$watch("values", function (newValue, oldValue) {
//draw chart using values and append to element[0]
});
};
return directive;
});
问题: 我是AngularJS的新手,我不知道这是否可行。
我在同一页面中还有两个图表,就像我们一样。每当我更改指令的变量时,我应该调用$ scope.apply吗?
手动调用$ scope.apply()有多少缺点(多次)?
如果我的方法不正确或效率低下,请提出其他方法。