2013-12-04 4 views
0

Я хотел написать директиву, которая применяется только к IMG тегам на протяжении всей моей страницы, и сначала я думал, что я должен украсить каждый тег с пользовательским именем директивы, такие как:Рекомендуется или рекомендуется использовать директиву, соответствующую стандартным тегам html?

<img my-img />.

Но, пока я собирал несколько примеров кода для этого вопроса, я решил посмотреть, будет ли директива соответствовать самому элементу IMG. И это сработало!

Вот что я сделал: http://plnkr.co/edit/z4n4a3MN89nRNYyXKCih?p=preview

app.directive('img', function() { 
    return { 
     restrict: 'E', 
     link: function (scope, element) { 
      element.bind('load', function() { 
       element.addClass('fadeIn'); 
      }); 
      element.bind('error', function() { 
       element.removeClass('fadeIn'); 
      }); 
     } 
    }; 
}); 

Как вы можете видеть, я хотел, чтобы все изображения на странице, чтобы исчезать, когда они загружены. Я хотел сделать это угловатым способом, не используя jQuery, поэтому я подумал, что это хороший подход, но это хорошая практика? В моем случае я действительно хочу, чтобы эта логика применима ко всем изображениям на моей странице (и может быть сотни), поэтому я думал, что это будет чистый способ сделать это, но для жизни у меня нет где-нибудь там, где это делает кто-то другой (т. е. сопоставление директивы с тегом IMG или любым стандартным тегом).

ответ

2

Я думаю, что избегал бы директивы img. Обратите внимание, что Angular уже добавил свои собственные директивы, которые соответствуют именам элементов html (например, - form, input, select, script), поэтому представляется возможным, что потенциально может быть конфликт, если они (или любая используемая вами библиотека) используют тот же название директивы. И вы действительно хотите исчезнуть во всех изображениях? Что делать, если вы используете изображение как украшение на странице?

Кажется, было бы лучше вместо этого добавить атрибут. Это очень интуитивно понятно с номинальным усилием. Если вам не нужны встроенные атрибуты, вы также можете создать свой собственный элемент (например,).

+0

Я из той же мысли, которая хотела бы избежать использования директивы img, но я в уникальной ситуации, когда мы использовали жесткий контроль. Это строго внутреннее приложение и работает только на одной машине в браузере Chrome. –

+0

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

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