AngularJS沒有內置的DOM選擇引擎,但提供了處理jQuery爲典型應用程序提供的一部分功能的實用方法。沒有jQuery的AngularJS DOM /文檔選擇
但是,DOM選擇仍然是國王,我試圖將jQuery保留在我的應用程序中,僅用於DOM選擇的唯一目的。
Angular以可注射的形式提供$ document服務。我覺得這很麻煩。例如,使用$文件,您將需要$文件注入到所需的所有指令,並呼籲querySelectorAll,然後將其與角範圍達到原生DOM選擇:
angular.element($document[0].querySelectorAll('#element'))
這是愚蠢的。
在有臨時我提供我自己一個全球性的幫手,但它不使用角的包裹$文件...
// Create a shortcut to querySelectorAll
window.query = function(selector) {
return document.querySelectorAll(selector)
}
// For use inside a directive like so...
angular.element(query('#element'))
AngularJS是過敏全局和包裝保護和可測試性全局。有沒有一種乾淨的方式,我可以利用querySelectAll而不傳遞$文檔到每個指令?我可以用jQuery的相同方式擴展angular.element,但利用querySelectorAll嗎?
編輯:
我也想說明原來的JQLite庫支持基本的選擇https://code.google.com/p/jqlite/wiki/UsingJQLite#Supported_Selectors。
的AngularJS但是執行不支持選擇,也似乎提這個功能遺漏 - http://docs.angularjs.org/api/angular.element
相反AngularJS做:
throw Error('selectors not implemented');
^當傳遞給angular.element該項目是一個字符串,它不不以'<'開頭。
它會是不錯的,如果那是:
return document.querySelectorAll(element)
...一些基本的錯誤預防邏輯。
你有沒有想過使用像[Sizzle](http://sizzlejs.com/)而不是完整的jQuery? (jQuery在內部運行) – 2013-03-22 18:00:12
我有,並且它可能是直到Angular採用選擇模式之前的方式。你會看到我已經更新了帖子,表明我希望它只是在異常點返回一個document.querySelectorAll嘗試。我的意思是,爲什麼不呢?這裏沒有增加膨脹。 – BradGreens 2013-03-22 18:17:25
我還應該注意到,在這些情況下,當Angular團隊推薦使用document.querySelectorAll時,他們從他們在這裏提倡的包裝全局模式中脫身 - http://docs.angularjs.org/api/ng.$window 。 – BradGreens 2013-03-22 18:19:55