有時,當我構建一個Angular自定義指令時,我會聽到一條評論,如果它是一個Angular指令,它不應該在其中使用jQuery代碼,因爲它應該以AngularJS方式構建。如果你構建一個AngularJS自定義指令,在代碼中使用jQuery是不好的做法嗎?
而且我認爲這可能是真的,但它有可能嗎?例如,如果指令模板包含2個部分,其中一個是單詞,另一個是微小圖像(例如審閱星),那麼您的模板中需要2個部分,標記爲.description
和.star-images
- 那麼您應該需要使用$.find(".description")
在模板中查找該部分,如果您需要對其進行操作或在其中進行操作。 jqLite將不起作用,因爲jqLite的find()
僅限於標籤。
另一個例子是,如果你有一個沒有模板的指令,但只是將按鍵限制在只有數字的位置,比如對於輸入框。所以你不希望你的指令有一個模板<input type="text">
,但只希望指令的用戶說<input type="text" digits-input-only>
,你的指令叫做digitsInputOnly
。所以在這種情況下,你不需要使用jQuery的elem.on()
或elem.bind()
來監聽按鍵事件或keydown事件,並且當按鍵代碼不是數字時,請執行event.preventDefault()
?那麼在那種情況下,它必須使用jQuery?
還有其他的方式來做到這一點,讓你真的不需要使用jQuery?
使用'angular.element()'就像使用jQuery一樣,除了它是一個「微小版本」的jQuery ...所以我的問題是...你應該使用jQuery,你應該甚至使用jqLite嗎? –
最好的辦法是不要使用jQuery ....直到你發現你需要一個比使用angular core更容易實現的插件。請注意,如果您確實使用自己的事件處理程序,那些處理程序中的範圍變化超出了角度上下文,所以您需要告訴角度來運行摘要。首先使用核心指令,而不是經常需要綁定自己的事件處理程序,但是如果您需要'jQlite'來幫助 – charlietfl
如果您還沒有閱讀這篇文章,那麼很值得一讀:[如果我有jQuery背景](http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background) – charlietfl