AngularJS 沒有元素選擇器算不算一個缺點?

同事問我了一個問題:

AngularJS 做麵包屑導航條,想獲取當前導航(原話是 class 是 active 的 a 標籤的 id)。

AngularJS 沒有內置的元素選擇器(angular.element 得和 jQuery 共存時才能起到元素選擇器的作用,否則只是一個 jqLite 的 wrapper)。我覺得 AngularJS 可能是故意不給元素選擇器功能的,所以我想出的辦法是:

把圖中代碼 [item.name == path] 改為 [compare(item, path)],並且定義:

$scope.compare= function(item, path){
if (item.name === path){
$scope.itemId = item.id;
return true;
}
return false;
}

然而這樣的缺點是,AngularJS 每次內部輪詢都要調用我寫的 compare 方法,若是其中有性能瓶頸,就會很卡。

另一種有同樣缺陷的辦法是:

$scope.watch(path, function(){
//輪詢所有的 item
//或者高級一點,用一個 hash 直接指向對應的 item
});

個人覺得雖然 AngularJS 給出了和 jQuery 完全不同的思路,但還是偶爾會想要一個元素選擇器。

綜上所述,大家覺得 AngularJS 到底應該有元素選擇器嗎?為什麼?

-----補充-----

有些回答說 querySelectors 和 getElementByTagName 什麼的,這些是個前端就會用行么,還可以把 zepto 的 qsa 方法copy 一份過來用。但這都不對題,因為我想知道我們到底需要不需要一個元素選擇器,求一個看起來很有道理的答案,謝謝。


-

思維方式不一樣。

先回答一個問題:

拿到這個ID幹嘛用?

你朋友的思路還是以DOM為中心的, 先有DOM, 再找數據。

而不是以DATA為中心, 先有數據,再渲染為DOM。

按angular的思維, 應該是你在$scope里有一個breadcrumbList, 用來標識麵包屑的追蹤。

然後這個breadcrumbList才去渲染出你要的麵包屑引導。

而不是反過來, 先渲染再去找ID。

如下源碼, 要不就是breadcrumbList的最後一個item表示當前, 要不item就有一個active屬性。

&

Backbone.js 的最佳應用場景有哪些?
關於mvc的理解?
前端 MVC 和伺服器端有哪些差別?

TAG:前端開發 | JavaScript | MVC | MVVM | AngularJS |