2013-12-14 3 views
2

Я пытаюсь создать директиву, которая будет добавлять атрибуты на основе результатов выражения. Я создал директиву blank, которая гарантирует, что поле пусто. Я хочу, чтобы эта директива находилась в состоянии, если результаты логического выражения истинны.AngularJS - Создание директивы, которая противоположна ng-required

В аффекте мне нужна директива типа ng-required, которая добавляет required на основе состояния. Я не могу найти код, который показывает, как оценивать выражение в правой части атрибута.

+1

Без какого-либо примера кода трудно полностью понять. Но вы можете eval любое выражение с '$ eval (exp)' в области. Документы для '$ eval': http://docs.angularjs.org/api/ng.$rootScope.Scope#methods_$eval –

+1

Я бы предложил посмотреть на базу кода для ngRequire – TheSharpieOne

+0

создать демо с тем, что вы пытаетесь. – charlietfl

ответ

2

Оказалось, очень легко создать пользовательскую проверку в AngularJS на основе атрибута. AngularJS не волнует, что называется валидацией. Если вы звоните $SetValidity в нужное время, все работает так, как должно.

@ Ответ на kevin-stone идет в правильном направлении. После того, как я смог точно сформулировать свой вопрос, я быстро нашел эту запись в блоге, в которой суммируется вопрос о том, как создать атрибут, который добавляет новую валидацию: https://medium.com/acekia-startup/48d9e823e17e.

Это немного сложный пример. Короче говоря, создайте директиву, restrict -ed для атрибутов (A) и requirengModel. Затем $watch или $observe атрибут в элементе. Затем вы можете посмотреть текущее значение модели и установить правильность, вызвав ngModel.$SetValidity. Опять же, AngularJS не заботится о том, что вы называете своей проверкой (в моем случае «пустой»).

2

Я бы использовал attrs.$observe, чтобы установить часы на значение атрибута.

module.directive('yourDirective', function() { 

    link: function(scope, element, attrs) { 

     attrs.$observe('yourDirective', function(newVal, oldVal) { 
      // Add or change attributes or classes here based on `newVal` 
     }); 
    } 

}] 

Для получения дополнительной информации см. documentation for Attributes.

Смежные вопросы