2014-06-23 104 views
18

對於一些原因,使用我不能改變一個元素的樣式如下:無法更改CSS樣式AngularJS

angular.element("#element").style.height = 100px; 

我敢肯定,angular.element("#element")的作品,因爲它返回一個DOM元素。另外,這個工程:

angular.element("#element").addClass('something'); 

(一切我發現大約ngStyle,但我不認爲這就是我要找的?)

我應該用別的東西嗎?

如果是這樣的話: 什麼? 爲什麼.style.something不起作用?

+0

您確定它按照您的描述工作。你必須加載jQuery是嗎? – david004

回答

41

根據the docs

注:所有角元素引用總是包裹着的jQuery或jqLit​​e;他們從來沒有原始的DOM參考。

所以.style屬性不可用直接,因爲它是被包裹HTMLElement的屬性。


您可以使用ivarni的做法來獲取HTML元素的保持(angular.element(...)[0].style...)或使用jQuery的/ jqLit​​e的.css()方法:

angular.element('#element').css('height', '100px'); 
+0

以及即時通訊嘗試使用angular.element(el).css(「 - webkit轉換」,「translate3d(200px,0,0)」),它根本不工作..似乎jqlite不解析「 - 」 。 –

+0

我剛剛發現!重要的是這個問題。不知道爲什麼 –

+1

不適合我。這工作:'angular.element(document.querySelector(「#element」))。css(「height」,「100px」)'。 –

10

Angular's element返回包裝DOM元素的東西,而不是DOM元素本身。 您可以像使用JQuery選擇器一樣訪問底層元素。

angular.element("#element")[0].style.height = 100px; 

這當然假設你有一個匹配,你應該使用一個ID。

+2

什麼?難道你沒有「通過選擇器查找元素不被jqLit​​e支持!」 – david004

+1

如果你在angular之前加載JQuery,他顯然做了,或者他會問另外一個問題。 – ivarni

+0

請參閱https://docs.angularjs.org/api/ng/function/angular.element,「要使用jQuery,只需在DOMContentLoaded事件觸發前加載它」。 – ivarni

0

如果不用jQuery的運行角度,這個工程:

angular.element(document.querySelector("#element"))[0].style.height = "100px"; 

我已經在離子應用中測試過了。

+1

這可以工作,但是你得到了兩次元素,一次使用'.element',一次使用'.querySelector' – Dementic