2013-03-22 88 views
4

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) 

...一些基本的錯誤預防邏輯。

+0

你有沒有想過使用像[Sizzle](http://sizzlejs.com/)而不是完整的jQuery? (jQuery在內部運行) – 2013-03-22 18:00:12

+0

我有,並且它可能是直到Angular採用選擇模式之前的方式。你會看到我已經更新了帖子,表明我希望它只是在異常點返回一個document.querySelectorAll嘗試。我的意思是,爲什麼不呢?這裏沒有增加膨脹。 – BradGreens 2013-03-22 18:17:25

+0

我還應該注意到,在這些情況下,當Angular團隊推薦使用document.querySelectorAll時,他們從他們在這裏提倡的包裝全局模式中脫身 - http://docs.angularjs.org/api/ng.$window 。 – BradGreens 2013-03-22 18:19:55

回答

5

$document是一個包裝,是真的。也許其中一位Angular作者可以證實這一點,但我認爲這並不意味着被注入指令。 $window也不是。它僅適用於您需要在ControllerService中處理$window$document的罕見情況和案例。

當你在一個指令中,假定有DOM。因此,如果您願意,可以直接使用documentwindow

角度設計的方式,你不需要複雜的選擇器。如果你正在做一個複雜的選擇(即使在指令內部),可能會有一個更簡單的方法來完成它。請注意,該指令可讓您直接訪問它所連接的元素。現在你應該主要關注元素周圍的元素,也許元素就像兄弟姐妹或直接的孩子。如果你正在尋找其他地方的節點,那麼這就是「氣味」的第一個標誌。

如果您可以讓我們知道您試圖達到的目標,那麼有人可能會建議您一個很好地解決問題的解決方案。

+0

有趣的點我發現的最常見的情況是注入元素s如樣式表從標籤從各種指令。我發現我還有其他一些可以使用ng-class指令等進一步細化的例子。也許我一直在想如何在Angular中使用$ document/$ window。 當然,很想聽到Angular球員的消息。 – BradGreens 2013-03-22 19:29:04

+0

這感覺很奇怪......但我現在增加了一個指令到元素......整齊。 – BradGreens 2013-03-22 20:09:29