推荐的处理AngularJS指令数据的方法

时间:2016-01-08 01:01:47

标签: angularjs

我经常看到<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;
            });
        }
    };
}]);

这是一种合适的或最终有缺陷的方法吗?

2 个答案:

答案 0 :(得分:0)

如果您的Content-Type指令与所有内容完全分离,那么这是绝对好的方法。但是,如果您需要calendarcalendar指令之间的某种通信,您可能希望将它们包含在父控制器中。或者,如果您在单个页面上有events-tracker个指令集合(带有删除或添加新日历的选项),那么通过引用传递数据也是一种方法。

修改 calendar可能通过范围传递给e.appointments,而不是属性,即具有calendar字段的隔离范围的日历。

答案 1 :(得分:0)

考虑到这一点后,我意识到替代解决方案确实存在缺陷,这是一个可重用性问题。

通过绑定到指令的隔离范围的属性提供events时,数据源是完全灵活的。

直接在指令的link函数内获取约会,会创建对AppointmentsService作为数据源的特定依赖关系。