2014-09-20 117 views
0

我有这个灯箱,从时间弹出时间。有3种方法可以关闭它。关闭按钮,点击外面的叠加层以及其他方式。对于关闭动作,我决定做一个工厂,看起来像这样:AngularJS工厂布局

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

一个,我想有密切的灯箱会是这样的我的HTML元素:

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

问题我面对的是:我应该的指令注入工厂(看到它操纵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> 

对战:

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 2014-09-20 20:49:32

+0

@ m59有点用处 - 只要以巩固我的观点,即“角度方式”并不总是最好的方式,即使在角度应用程序中也是如此。谢谢。 – 2014-09-20 23:25:27

+0

@RaduAndrei我不太清楚你的意思。 – SomeKittens 2014-09-21 04:37:28

回答

1
  1. 请勿操纵控制器或服务中的DOM(服务, 工厂)。你必须这样做,在指令
  2. 而是使用jQuery选择你可以直接得到元素的保持和操纵它的内部指令
  3. 采用了棱角分明的动画,而不是依赖jQuery的

更重要的是所有的疑问及以上问题你解决了这个真棒视频,这只是解释创建一个指令,以隐藏与动画的东西。 https://egghead.io/lessons/angularjs-animating-the-angular-way

干杯!!!!

+0

我看到影片开始前“声明DOM”的原因是没有足够的理由,我需要在这一点上做的,还是一般。此外角动画是CSS转换,时期。 jQuery动画不止于此。另一个方面是操作发生在指令中(工厂注入)。工厂的使用是因为这段特定的代码不需要一个范围,并且总是指向相同的元素!所以谢谢你,但我不会在视频中使用这种方法。 – 2014-09-20 23:21:39

+0

既然你问:“如果我要对这个整个事情的正确方法”,我指出了东西是不是角的方式。你很高兴用jQuery方式实现你自己的解决方案,只要它服务于目的 – Siraj 2014-09-20 23:33:34

+0

我意识到我可能没有足够的明确我的意思是“正确的方式”,并给出了很少的信息。我为此道歉,但是为什么工厂注入一个指令(抛开jQuery代码)并且在其内部操纵DOM,而不是“角度的方式”? – 2014-09-20 23:43:10