2016-01-08 29 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的特定依賴關係。