2013-07-16 77 views
0

我在發送和捕獲Angular中的事件時遇到了一些麻煩。如何捕獲由Angular中的指令引發的控制器中的事件?

考慮這個plunker:Plunk..

正如你可以看到我有兩個控制器和指令。控制器1中的指令'lives'。當指令中發生某些事情時,我想在控制器2中捕獲這個事件。正如你在plunk中看到的那樣,沒有任何東西被記錄到控制檯。該事件沒有捕捉到。

我也試過使用服務。在這種情況下,我在服務上創建了一個方法,當調用這個方法時,我拋出了這個事件。就像在普拉克中,我在控制器2中聽到這個事件,但這也沒有奏效。

凡一切都歸結爲是我想要調用一個方法的另一個控制器上..

回答

1

每次你訪問一個路徑,相關的控制器(和$範圍)是(重新)創建。

由於您提到Controller 2與路由相關聯,它只會在您訪問該路由時存在(因爲@Ajay和@Stewie已經提到),所以您無法在該控制器中捕獲事件。

我建議你創建了一些API /方法的服務,做到以下幾點:

  • 記錄一個事件觸發
  • 檢查,以查看是否有事件觸發
  • 清楚事件

您的指令會調用該方法來記錄觸發器。 您的控制器2在創建時會調用檢查方法(如果發現觸發器集,則可能調用clear方法)。

+0

感謝您的回覆。如果我理解你是正確的,你建議在服務器的變量/屬性上在控制器2上創建一個$ watch? – Martijn

+0

@Martijn,只有在檢測到變化時(以及初次初始化時)纔會觸發$ watch。這可能適用於您的場景,但它可能不適用。如果在控制器2創建之前事件已經觸發,那麼只需調用服務上的一個方法,作爲控制器2初始化的一部分,以確定事件是否發生。如果事件可能在控制器2存在的情況下發生,那麼也可以使用$ watch。 –

+0

在我的場景中,當事件被觸發時,我不認爲控制器2存在。所以你建議「簡單地調用服務上的一個方法,作爲控制器2初始化的一部分,以確定事件是否發生。我不確切地知道你的意思。你能解釋一點嗎? – Martijn

2

在你Plunker,第二控制器(SecondController)註冊,但它從來沒有真正初始化。所以這就是爲什麼你的聽衆不會記錄事件。

不清楚在使用第二個控制器的情況下何時何地使用第二個控制器,但是如果使用ng-view(通過路徑)或ng-controller初始化它,那麼監聽器將觀察事件。

PLUNKER

+0

感謝您的回覆。我在我的路線中註冊了控制器2(我無法使用路線和模板讓沉悶者工作)。但是我的所有控制器都是在路由中配置的。在這種情況下,我正在查看page1.html(帶控制器1),它是'foo'指令。 foo指令指的是foo.hmtl。當foo.html發生什麼事情時,我想提出一個事件,並且我想在控制器2中捕獲這個事件,而此時該事件不可見(/ loaded?),但已註冊到路由中。 – Martijn

+0

不可能與$ routeprovider配置 –

+0

@Ajaybeniwal對不起,我不明白你的意思。 – Martijn

相關問題