Суть проста. Контроллер предоставляет данные, link мэпит данные на директиву (а как, через scope, темплейты, напрямую взаимодействуя с DOM - решать вам).
То есть...
angular.module('app', [])
.directive('fooBar', function () {
return {
restrict: 'EA',
requires: 'fooBar',
controller: controller,
link: link
};
function controller() {
var bars = [];
this.getSomeData(someOption){
return someValueOrPromise;
}
// do soome logic with data
}
function link(scope, el, attrs, ctrl) {
ctrl.getSomeData(attrs.options).then(function (data) {
// render data
}
}
});
Таким образом у вас работа с данными никак не зависит от способа вывода этих данных. Воспринимайте функцию link как слой представления.
В случае с ngModel - если честно не могу предложить сходу варианты при котором контроллер должен иметь к нему доступ. Предложите пример если не сложно.