2014-09-20 2 views
0

У меня есть этот лайтбокс, который появляется время от времени. Есть три способа закрыть его. Нажмите кнопку «Закрыть», щелкнув надпись, находящуюся за ее пределами, и другим способом. Для близкого действия я решил сделать фабрику, которая выглядит следующим образом:Установкой на заводе AngularJS

app.factory('close',function(){ 
    return { 
     close: function(){ 
       $('.mySelector').fadeOut(); 
      } 
    } 
}); 

Один из моих HTML-элементов, которые я хочу, чтобы закрыть лайтбокс будет что-то вроде этого:

<a href="" ng-click="close">close lightbox</a> 

вопрос я столкнулся с этим: должен ли i ввести завод в директиве (видя, как он манипулирует DOM) или в контроллере? - Контроллер существует в любом случае, так как мне это нужно для других вещей. Преимущество первого заключается в том, что у моей разметки будет только контроллер, прикрепленный к верхнему элементу лайтбокса, и с ним можно сделать. Директива, с другой стороны, должна быть привязана к каждому элементу индивидуально + есть сам код директивы (мало что может быть).

Это приводит к:

added code for directive + 
<top-element-of-lightbox ng-controller="myController"> <!-- controller does NOT have factory injected --> 
    <a href="" ng-click="close" **my-directive**>close lightbox1</a> <!--directive attached to element --> 
    <a href="" ng-click="close" **my-directive**>close lightbox2</a> <!--directive attached to element --> 
    ... 
</top-element-of-lightbox> 

Versus:

0(zero) directive code + 
<top-element-of-lightbox ng-controller="myController"> <!-- controller HAS factory injected --> 
    <a href="" ng-click="close">close lightbox1</a> <!-- no directive attachment --> 
    <a href="" ng-click="close">close lightbox2</a> <!-- no directive attachment --> 
    ... 
</top-element-of-lightbox> 

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

+2

http://stackoverflow.com/questions/14994391/how-do-i-think-in-angularjs-if-i-have-a-jquery-background?rq=1 – m59

+0

@ m59 Немного полезно - если только чтобы укрепить мое мнение о том, что «угловой путь» не всегда лучший способ, даже в угловом приложении. Спасибо. –

+0

@RaduAndrei Я не совсем уверен, что вы имеете в виду. – SomeKittens

ответ

1
  1. Не манипулируйте DOM контроллером или услугами (сервис, завод). Вы должны сделать это в директиве
  2. Вместо того, чтобы использовать селектор JQuery вы можете непосредственно разжиться элемента и манипулировать внутри директивы
  3. Используя угловые анимации вместо того, чтобы полагаться на JQuery

Самое главное все ваши запросы и выше проблема, с которой вы сталкиваетесь, решена в этом потрясающем видео, которое просто объясняет создание директивы для скрытия материала с анимацией. https://egghead.io/lessons/angularjs-animating-the-angular-way

Cheers !!!!

+0

Я видел видео раньше, и причина «декларативного дома» не является достаточной причиной для того, что мне нужно делать в этот момент или вообще. Кроме того, угловая анимация - это css-переходы, период. jQuery анимации - это нечто большее. Другой аспект заключается в том, что манипуляции имеют место в директиве (завод вводится). Фабрика используется, потому что эта часть кода не нуждается в объеме и всегда относится к одному и тому же элементу! Так что спасибо, но я не собираюсь использовать этот подход в видео. –

+0

Поскольку вы спросили: «Если я собираюсь все это правильно», я указал на вещи, которые не имеют угловатого пути.Вы счастливы реализовать свои собственные решения в режиме jQuery, пока оно служит цели. – Siraj

+0

Я понимаю, что я, возможно, не был достаточно явным, о том, что я имел в виду «правильным способом», и дал небольшую информацию. Я извиняюсь за это, однако почему заводская инъекция в директиве (оставляя в стороне код jQuery) и манипуляции с DOM внутри нее, а не «Угловой способ»? –

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