說,如果你定義與模板指令:對於AngularJS自定義指令,什麼是在您的模板中查找子元素的正確方法?
<div>
<button id="add-button">add</button>
{{ value }}
<button id="minus-button">minus</button>
</div>
那麼什麼是找到你的link(scope, element, attrs)
功能的按鈕,以正確的方式?
一些想法和細節:
我見過
angular.element(document.getElementById("add-button"))
(該angular.element
是把它轉換回jqLite/jQuery對象)
但如果一個用戶在其頁面上多次添加您的指令,那麼該行將找到錯誤的元素,因爲document.getElementById("add-button")
可能會找到第一個匹配元素在具有該ID的整個頁面上。
由於jqLite只能通過標籤名稱查找,所以我們也許能夠做的,通過返回DOM方法:
angular.element(element[0].querySelector("#add-button"))
或者說,我不知道爲什麼jqLite不會讓你找到通過類名或ID,所以它可能被推薦到實際AngularJS之前加載jQuery和使用完整版本的jQuery:
element.find("#add-button")
或者,按說只能用相同的ID一個元素在整體上應該存在頁面,所以要更正確,我們真的應該而不是使用ID類名由
element.find(".add-button")
識別元素,如<button class="add-button">
,發現它我認爲標籤名稱搜索,然後用1號找到的元素或第二個找到的元素是不是一個好辦法,因爲如果稍後更改或重新排列模板,那麼您需要更改代碼,因此它們緊密耦合在一起。
的問題是:爲什麼你需要找到你的指令,任何元素?不能用另一個指令處理嗎? – BroiSatse
會有情況嗎?或者大部分可以通過'ng-click'或其他客戶指令來處理?我看到Angular代碼示例尋找子元素並向它們添加事件處理程序,或者查找狀態行以供稍後更改內容......是否可以通過scope.status和{{status}}完成? –
我看到的例子得到的子元素,所以然後谷歌地圖可以稍後實例化...所以我認爲這是一個第三方庫的情況 –