2014-02-24 105 views
21

有沒有通過Chrome的控制檯找到元素的控制器的方法?我可以通過元素面板中選擇元素,並使用從元素的角度獲取控制器

var c = angular.element($0); 

ccontroller屬性(看起來像一個構造函數)獲取到組件的引用,但我不知道該怎麼做這個。有沒有辦法從這裏找到控制器的名字?

+0

你只是試圖讓控制器名稱,或者是你想使用控制器的功能和項目的範圍。 –

+0

@JaredReeves只是控制器名稱。 – reergymerej

回答

16

如果你angular.element($0).scope()或只是$scope(如果安裝Batarang Chrome擴展),你應該能夠獲得訪問所選元素的範圍的功能和性能。這應該還包括控制器在範圍中公開的任何功能/屬性。

雖然沒有辦法獲得控制器的名稱。

+0

有沒有辦法從其範圍獲取控制器的名稱? – reergymerej

+0

除非範圍'需要'控制器。從控制檯訪問控制器的用例是什麼? –

+0

我只是好奇,如果有可能的話。 – reergymerej

4

正如@jusopi已經指出的那樣,你可以使用jqLit​​e額外的方法angular.element(element).controller(componentName)

[它]檢索當前元素或其母公司的控制器。默認情況下,檢索與ngController指令相關的控制器。如果名作爲駝峯指令名提供,那麼對於這個指令,控制器將被檢索

如果在駝峯提供一個指令/組件名稱還可以得到所有指令的特定控制器/在選定的元素組成:

angular.element($0).controller('MyComponent')

($ 0是指在要素檢查的最新選擇)

+1

我希望他們會更強調在文檔中更多。我剛剛從你的回答中瞭解到了這一點。謝謝。 – jusopi

3

這適用於Angular 1。5的部件

假設你有一個名爲ProductViewComponent組分,它是由ProductViewController處理,然後讓控制器很簡單:

angular.element("product-view").controller("productView") 

備註

  • 注意小寫字母和衝擊元素名稱
  • 和小寫字母並且沒有「Controller」後綴X在控制器文本

例子

現在你可以用它玩,比如調用方法:

angular.element("product-view").controller("productView").hasProducts(); 

或調用行動

angular.element("product-view").controller("productView").products = [ 'abc' ] 
angular.element("product-view").scope().$apply() 
+0

無論控制器名稱如何,這都可以工作。調用'element.controller()'的文本只需要是組件的camelCase名稱。你從哪裏找到這條神奇的信息?整個上午我一直在尋找,直到我偶然發現這顆寶石。 – burns

+0

@burns - 此代碼是角度組件測試(組件測試中的組件測試)的一部分。我只是在徘徊,是否應該在「真正的」瀏覽器中工作。 –

+0

它在鉻devtools完美的作品。 – burns