как использовать область наследования и изолированную область вместе

0

У меня есть 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 в качестве аргумента.

Plunker

  • 0
    Почему нет? Вы можете получить необходимые атрибуты и посмотреть их, или даже не нужно смотреть в вашем случае, если поле статическое.
  • 0
    попробуйте '<a href="#" ng-click="sort_by('+order+')" style="color: #555555;">
Теги:

1 ответ

2
Лучший ответ

Вы можете немного исправить свою функцию ссылок.

Эта функция имеет несколько параметров: 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 - обеспечивает способ выполнения выражения в контексте родительской области.

  • 0
    Спасибо за полное руководство @Grundy

Ещё вопросы

Сообщество Overcoder
Наверх
Меню