2014-08-27 5 views
4

Я пытаюсь создать filter в угловом, что может повлиять на способ передачи данных, привязанных к директиве, подобно тому, как фильтр json может быть применен к выражению.angularjs, создавая фильтр для директивы

У меня много проблем с этим, так как кажется, что определение фильтра недостаточно для работы над чем-либо, кроме встроенных выражений. Я абсолютно уверен, что видел это раньше.

Вопрос

Можно ли создать фильтр, который работает рядный с директивой? Как это?

<div ng-directive="Model.Target | filterName"></div> 

Обновление

ng-model только в качестве примера. Я не ищу существующий фильтр, я не ищу, как применять фильтры, я не ищу ng-repeat. I специально хочу создать новый фильтр, который может работать с директивой.

Update 2

Попытка сделать это немного больше, я исследовал angular исходный код (line 154 of filters.js) и пытался подражать код, но я встретился со странным поведением Используя этот код;.

.filter('sample', function() { 
    return function (obj) { 
     console.log("typoef: ", typeof obj); 
    } 
}); 

Я пытаюсь связать его с директивой;

<div data-ng-custom-directive="Model.Tags | sample"></div> 

я получаю ошибку ...

Пользовательская директива на самом деле не является чем-то особенным, она просто берет объект и обрабатывает его перед отправкой его на объект $scope.Model.Tags.

Кто-то упомянул, что вы не можете поместить фильтр на ng-model, и это меня смущает. Это только ng-model, или это любая директива другая чем ng-repeat что вы не можете применить директиву? То, как я это понимаю, просто нет фильтров , написанных, которые работают против ng-model, и пока я не пытаюсь это сделать, концепция не слишком разнообразна.

+0

Это не совсем ответить на него.Не можете ли вы поместить фильтр в какую-либо директиву или просто ng-модель? – Ciel

+0

Да, вы можете это выразить, например, с выражением 'ng-repeat', которое, очевидно, определяется директивой ng-repeat, нет смысла помещать его на ngModel, хотя в соответствии с вашим примером – PSL

+0

Хорошо. «ng-model» был просто примером. Вы знаете какие-либо примеры фильтров, которые работают с другими директивами? Я хочу посмотреть, как они сделаны, поэтому я могу создать фильтр для другой директивы. – Ciel

ответ

3

Проблема не в фильтре, а в том, какой тип привязки вы используете для переменной (атрибута) вашей директивы. Вам нужно использовать '='. Пример:

HTML

<div ng-init="test = [1,2,3,4,5]"> 
    <div dir-a="test | limitTo:3"></div> 
</div> 

JS

.directive('dirA', function() { 
    return { 
     scope: { 
      dirA: '=' // this is important, '@' would not work 
     }, 
     link: function($scope, iElm, iAttrs, controller) { 
      console.log('$scope.dirA = ', $scope.dirA); 
     } 
    }; 
}); 

печатает на консоль "$scope.dirA = " Array [ 1, 2, 3 ]

+0

О, мой бог, теперь это имеет гораздо больше смысла. Я еще не достиг того, чего хочу, но он больше не дает мне таких же глупых ошибок! Огромное спасибо. – Ciel

+0

Чтобы уточнить, что я пытаюсь сделать ... У меня есть сторонняя библиотека, которая имеет множество угловых директив, но есть много вариантов для установки. Создание пользовательских директив для них - это работа, но она начинает выглядеть очень тупой и раздражающей. Я новичок в угловой и хочу учиться, поэтому я подумал, что попытка сделать выбор в качестве фильтров станет хорошим следующим шагом. В основном потому, что множество опций - это истинные/ложные флаги, а не вещи, которые нуждаются в переданном значении. – Ciel