Arhn - архитектура программирования

AngularJS: настраиваемый фильтр внутри шаблона директивы

Я пытаюсь создать директиву, в которой мне нужно отформатировать значение в соответствии с фильтром, который может различаться (в зависимости от поля это может быть «число: 2», «дата»... или что-то еще).

Итак, я хочу определить фильтр, когда использую директиву в разметке. Сценарий показан с помощью этого плункера: http://embed.plnkr.co/N2zKITFpUQMxmylAAGlt/preview

Пока фильтр не применяется или возникают ошибки.

Как правильно это реализовать? спасибо


Ответы:


1

Вот один из способов сделать это с помощью template:function(elem,attrs)

app.directive('editableField', function() {
    return {
        restrict: 'A',
        replace: true,
      template:function(elem,attrs) {

        return '<div>' +
            '<input ng-model="editableModel" />' +
            '<div class="output">{{editableModel|'+attrs.editableFilter+' }}</div>' +
             '</div>';
      },

     /* if using in a form....I would remove the isolated scope*/
       scope: {
          editableModel: '='
      },
      controller: function($scope) {},
      link: function($scope, $element, $attrs, $filter) {
        var input = $element.find('input');
        input.bind('click', function () {
            this.select();
        });
      }
    };
});

ДЕМО

29.10.2013
  • Спасибо, пока лучшее решение, которое я видел. 29.10.2013

  • 2

    Вот рабочий Plunkr:

    http://plnkr.co/edit/nZgah7PtGRVMWBgKu7V8?p=preview

    Есть два примера: один форматирует его как число с плавающей запятой, а другой предположительно форматирует его как дату. Само форматирование я не делал, так как это довольно тривиально.

    29.10.2013
  • Спасибо. Это может быть второе решение, но пока я нахожу предыдущий ответ (от charlietfl) более чистым и простым. 29.10.2013
  • Я бы сказал, что мое решение чище, поскольку оно не включает в себя объединение строк в шаблоне. Кроме того, мой будет работать для сложных объектов, которые вы можете передать своему фильтру. 29.10.2013
  • Я согласен с вами в этом, но мне не нравится, как в вашем примере включается тип фильтра. 29.10.2013
  • Вы можете проверить мое отредактированное решение, которое еще короче: gist.github.com/anonymous/3d2d79d6ef2d87fae0fa 29.10.2013
  • @MatteoPiazza, вам не нужно использовать мой пример переключения фильтров. Вы могли бы также легко использовать встроенные фильтры angular, просто изменив строку кода. А добавив всего две или три строки кода, вы можете заставить его использовать как пользовательские фильтры, так и встроенные фильтры angular. Однако я хочу сказать, что включение определения фильтра в ваш шаблон — это странно. Вы могли бы сделать это более чистым способом. 29.10.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..