2017-03-07 72 views
0

我有一個名爲suggest嵌套循環內組分:角1.5:調用一個部件的方法內ngRepeat

<div ng-repeat="phrase in model.phrases track by $index"> 
    <div ng-repeat="word in phrase.words track by $index"> 
     <suggest phrase-index="$parent.$index" word-index="$index"></suggest> 
    </div> 
</div> 

我需要從根範圍操縱組件的數據。這樣做的最好方法是什麼?

我的主要問題是通過短語索引和詞索引找到正確的組件實例。雖然通常我會寫$('suggest[phrase-index="0"]')之類的東西,但在這種情況下它不起作用,因爲屬性值仍然是"$parent.$index"

另一個不清楚的部分是在找到它後調用組件的方法。現在我正在使用$(element).children()。scope()來獲取作用域引用並調用一個方法,但文檔聲明scope()只能用於調試。什麼會更好?

有可能我這麼做都是$ -y,還有更好的方法。我只是不想在多層組件/服務忙於使用層間傳遞方法調用的情況下對此進行過度設計。

+0

你能提供更多的xode的例子,你如何調用方法,你使用的是jQuery嗎? –

+0

「我只是不想過度設計多個組件/服務忙於在層之間傳遞方法調用」 - 爲什麼使用角?爲什麼你使用組件?繼續使用一個HTML和一個控制器 - 你不會有任何「過度工程」的問題 –

+0

@Fribu通常我會遍歷所有建議組件,並在每個組件上調用方法。 – ulu

回答

0

您可以在$ rootScope上發出事件,並在組件控制器中定義的事件列表中調用組件方法。

某處在你的應用程序發出的事件與所需的組件實例的索引值:

$rootScope.$emit('suggestEvent', someIndexValue); 

和在組件控制器定義事件偵聽器調用組件的方法,如果phrase-index等於在事件傳遞索引值:

//inside suggest component controller 
$rootScope.$on('suggestEvent', function(index) { 
     //call component method if 'index' value is equal to component `phrase-index` 
     if (this.phraseIndex === index) { 
      this.someMethod(); 
     } 
})