2016-01-08 32 views
0

我经常看到一些例子,如<calendar events="a.appointments"></calendar>,其中控制器内分配的数据通过属性绑定传递给指令。处理AngularJS指令数据的推荐方式

下面的代码显示了一个替代解决方案,其中所需数据直接在指令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

如果您的calendar指令与所有内容完全分离,那绝对是非常好的方法。但是,如果您需要calendarevents-tracker指令之间的某种通信,则可能需要将它们放在父控制器中。或者,如果您在单个页面上收集了calendar指令(可选择删除或添加新日历),那么通过引用传递数据也是一种方法。

EDIT e.appointments很可能通过范围传递给calendar,不属性,具有分离的范围与events字段即日历。

0

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

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

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