我越讀(並嘗試測試)Angular應用程序,我看到控制器引用DOM是不好的做法。 (例如this blog post)。如何處理DOM和控制器之間的交互?
我必須缺少一些大的東西,因爲如果控制器無法訪問DOM(例如通過像「document.getElementsByClassName
」這樣的「常規」javascript調用),那麼我不明白如何做很多事情我會考慮非常基本。
下面是有一些的,我的應用程序做同樣的問題做作,簡單的例子:
- 我有一個指令,簡直就是一個紅色的盒子(應用一些樣式的DIV),並使用NG -transclude。所以我會在我的HTML文件中使用它,如
<red-box>Text that goes in the red box</red-box>
- 單擊按鈕時,將所有紅色框的顏色更改爲藍色。我想有這樣的事情在我的HTML文件:
<intput type="button" value="Make Them Blue" ng-click="makeThemBlue"/>
- 在控制器的
makeThemBlue
功能,我會(例如)找到所有類名的div和類更改爲別的東西,這使得它們藍色
現在考慮一下,我的真實應用程序要複雜得多 - 許多「盒子」由嵌套的指令組成,可以拖動並保存位置。控制器讀取所有保存的設置,並根據用戶如何保存設置將所有設置放在一起。
如何在不讓控制器訪問DOM的情況下執行上述任一示例?
嗯......好吧。讓我們更簡單的情況下,有一個紅色框,當用戶點擊它,它變成藍色。在這種情況下,我認爲我們不需要這項服務,對吧?那麼在指令本身中會有代碼來獲取DOM元素?或者有什麼方法可以在指令中直接說出'this.setStyle('background-color','blue')? – Jer 2014-10-28 15:29:25
在這種情況下,它更簡單。 您的templatehtml將如下所示:'
' 'ng-class'將指向您的作用域上的一個字符串,'ng-click'會將其從 redClass更改爲blueClass。 – 2014-10-28 15:39:14