Я создал простую директиву, которая отображает заголовки столбцов сортировки для <table>
, которые я создаю.
ngGrid.directive("sortColumn", function() {
return {
restrict: "E",
replace: true,
transclude: true,
scope: {
sortby: "@",
onsort: "="
},
template: "<span><a href='#' ng-click='sort()' ng-transclude></a></span>",
link: function(scope, element, attrs) {
scope.sort = function () {
// I want to call CONTROLLER.onSort here, but how do I access the controller scope?...
scope.controllerOnSort(scope.sortby);
};
}
};
});
Здесь приведен пример создания некоторых заголовков таблиц:
<table id="mainGrid" ng-controller="GridCtrl>
<thead>
<tr>
<th><sort-column sortby="Name">Name</sort-column></th>
<th><sort-column sortby="DateCreated">Date Created</sort-column></th>
<th>Hi</th>
</tr>
</thead>
Итак, когда щелкнул столбец сортировки, я хочу запустить функцию onControllerSort на моем контроллере сетки... но я застрял! Пока единственный способ сделать это - для каждого <sort-column>
, добавить атрибуты для "onSort" и указать ссылки в директиве:
<sort-column onSort="controllerOnSort" sortby="Name">Name</sort-column>
Но это не очень приятно, так как я ВСЕГДА хочу вызвать controllerOnSort, поэтому его включение в каждую директиву немного уродливо. Как это сделать в директиве, не требуя ненужной разметки в моем HTML? Как директива, так и контроллер определяются в одном модуле, если это помогает.