Для пользовательской директивы наблюдайте атрибут только в том случае, если передано выражение.

#angularjs #angular-directive

#angularjs #angular-директива

Вопрос:

У меня есть директива, которая отслеживает переданный атрибут, но для этого атрибута может быть передано необработанное строковое значение или выражение. Если выражение передано, мне нужно его просмотреть. Но если передается необработанная строка, мне действительно не нужно смотреть атрибут. Мне интересно, существует ли стандартный способ необязательного просмотра атрибута на основе того, передается ли выражение по сравнению со строкой? Я могу проверить наличие «{{*}}» в attrs, но не уверен, что это завершено.

Директива просто делает это:

 //my-drct.js
 scope.watch( function(){attrs.specialProperty;} , function(value){ 
   controller.update(value); 
 })
 

и мой-drct можно использовать следующим образом:

 <div my-drct = '{{foo}}'> //need to watch
//or
<div my-drct = 'foo' >  //dont need to watch
 

Ответ №1:

Для этого вы можете использовать $parse сервис.
Анализируемое выражение имеет constant свойство (логическое значение), которое указывает, состоит ли выражение из постоянных частей (поэтому оно останется неизменным навсегда) или в нем также есть некоторые динамические части.

Например.:

 .directive('myDrct', function ($parse) {
    return {
        ...
        link: function myDrctPostLink(scope, elem, attrs) {
            var isConstant = $parse(attrs.myDrct).constant;

            if (isConstant) {
                ...
            } else {
                ...
            }
        }
    };
});
 

Смотрите также эту короткую демонстрацию.