У меня есть html-таблица, которая нужна для сортировки.
<table>
<thead>
<tr>
<th custom-sort-one order="'Name'" >Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>Name_AAA</td>
</tr>
</tbody>
</table>
Поэтому я создал свою собственную директиву customSortOne
.
app.directive("customSortOne", function() {
return {
restrict: 'A',
transclude: true,
/// Isolated scope
scope: {
order: '='
},
template: '<a href="#" ng-click="sort_by(order)" style="color: #555555;"><span ng-transclude></span></a>',
link: function(scope) {
scope.sort_by = function(ColumnToSort) {
console.log("ColumnToSort =", ColumnToSort);
/// Below function cannot be called because it is in isolated scope.
scope.TestFunction();
};
}
}
});
Директива работает, когда пользователь нажимает заголовок столбца " Name
, функция с именем sort_by
знает, какой столбец требуется для сортировки.
Проблема в том, что он не может вызвать функцию родительской области видимости, которая написана в контроллере.
Поэтому я изменяю свою директиву с помощью унаследованной области.
app.directive("customSortTwo", function() {
return {
restrict: 'A',
transclude: true,
/// Inheritance scope
scope: true,
template: '<a href="#" ng-click="sort_by(order)" style="color: #555555;"><span ng-transclude></span></a>',
link: function(scope) {
scope.sort_by = function(ColumnToSort) {
/// ColumnToSort is undefined which is not what I want
console.log("ColumnToSort =", ColumnToSort);
/// Below function can be executed because I changed to Inheritance scope.
scope.TestFunction();
};
}
}
});
Наконец, я могу вызвать родительскую область, но проблема в том, что я не могу дать значение функции sort_by
в качестве аргумента.
Вы можете немного исправить свою функцию ссылок.
Эта функция имеет несколько параметров: scope
, element
, attributes
и т.д.
Таким образом, вы можете просто увидеть значение для необходимого атрибута
link: function (scope,elem, attrs) {
scope.order = attrs.order;
Конечно, эта работа для значения статического атрибута, и в этом случае не нужны кавычки.
Обновлено Plunkr
UPDATE: как для первой функции: вы можете вызвать функцию из родительской области, просто передать ее как
<th custom-sort-one order="'Name'" func="TestFunction()" >Name</th>
и в директивном использовании &
& or & attr - обеспечивает способ выполнения выражения в контексте родительской области.
'<a href="#" ng-click="sort_by('+order+')" style="color: #555555;">