2013-08-20 33 views
0

還試圖圍繞如何正確做角度的事情。所以我有一個這樣的指令Angularjs指令vs範圍指定的行爲

<div my-directive> 
    <input type="button" value="Click" /> 
    <div id="someElementToRemove"></div> 
</div> 

我想分配一個onlick監聽器到輸入按鈕。這個輸入按鈕操縱DOM,刪除指令模板內的一些元素。所以我的問題是我應該在哪裏指定這種行爲。我知道控制器不應該有任何DOM操作邏輯,所以我會爲此功能創建一個指令?

例如,

... ...

我的指令

app.directives.directive('removeElement', function() { 
//logic to remove element 
} 

我只是想知道,如果這樣的小事功能權證指令。或者,我應該通過document.getElementById('button')。addEventListener ...指定一個onclick處理程序....

理想情況下,我只想爲該按鈕指定一個ng-click元素,並在像這樣的控制器。這似乎是最簡單的方法。

... 
<input type="button" value="Click" ng-click="removeSomeElement()"/> 
... 

controller.js 
... 
$scope.removeSomeElement() = function() { 
    ... 
} 

回答

0

在這種情況下,您應該問自己幾個問題。

  • 我想讓這一點功能可以重用嗎?如果是這樣,那麼把它移到一個指令上是有意義的,特別是如果它在執行DOM操作的話。
  • DOM操作是否相當限制某個DOM結構?如果是這樣,那麼一個可重用的指令在這裏沒有幫助,或許你應該研究一個替代操縱dom的方法。
  • 我是否真的需要操縱DOM?如果它是一件微不足道的事情,將它放在控制器中是正確的,那麼你可能是對的。除了你可能不需要實際做任何DOM操作。你能不能操縱控制器中的數據,並讓一些爲DOM操作而構建的其他角度指令處理任何數據所說的內容。

如果你只是刪除像你這樣的元素,你說這是ng-if的理想場所。

+0

感謝Derek,在我的情況下,功能是一次性的,並不意味着可重用。就操縱控制器中的數據而言......這意味着要在該指令中添加$ watch,對嗎?再次感謝。 – Apples

+0

沒問題。我不確定你是如何設置的,但你不需要$ watch電話。你應該能夠擁有一些等於true的範圍布爾值。當您單擊輸入按鈕時,將布爾值設置爲false。然後在你想刪除的元素上使用布爾型的ng-if指令,如下所示: DerekR

+0

好的,我沒有考慮使用ng-if。我知道這是最近的一個功能。我想知道如何在ng-if之前完成這個工作。我有足夠的信息來做我想做的事情。似乎有太多的選擇。謝謝 – Apples