我经常看到<calendar events="a.appointments"></calendar>
等示例,其中控制器中分配的数据通过属性绑定传递给指令。
下面的代码显示了另一种解决方案,其中所需数据直接在指令link
函数中收集。使用这种方法不需要单独的控制器。
diary.html
<calendar></calendar>
calendar.js
angular.module('diary').
directive('calendar', ['AppointmentsService', function(AppointmentsService) {
return {
template: 'calendar.html',
scope: {},
link: function($scope) {
$scope.events = {};
AppointmentsService.getAppointments().then(function(result) {
$scope.events = result;
});
}
};
}]);
这是一种合适的或最终有缺陷的方法吗?
答案 0 :(得分:0)
如果您的Content-Type
指令与所有内容完全分离,那么这是绝对好的方法。但是,如果您需要calendar
和calendar
指令之间的某种通信,您可能希望将它们包含在父控制器中。或者,如果您在单个页面上有events-tracker
个指令集合(带有删除或添加新日历的选项),那么通过引用传递数据也是一种方法。
修改强>
calendar
可能通过范围传递给e.appointments
,而不是属性,即具有calendar
字段的隔离范围的日历。
答案 1 :(得分:0)
考虑到这一点后,我意识到替代解决方案确实存在缺陷,这是一个可重用性问题。
通过绑定到指令的隔离范围的属性提供events
时,数据源是完全灵活的。
直接在指令的link
函数内获取约会,会创建对AppointmentsService
作为数据源的特定依赖关系。