Obiettivo: creare comportamenti utilizzando le direttive con comunicazione tra 2 elementi di pari livello (ciascuno con la propria direttiva).Comunicazione con le direttive di pari livello
Un comportamento da utilizzare nell'esempio: il contenuto dell'articolo è nascosto per impostazione predefinita. Quando si fa clic sul titolo, desidero visualizzare il contenuto dell'articolo correlato.
Il fermo: gli elementi dell'articolo correlati devono associarsi tra loro senza essere annidati in un singolo elemento padre o direttiva.
<div article="article1">this is my header</div>
<div id="article1" article-content>this is content for the header above</div>
<div article="article2">this is my header</div>
<div id="article2" article-content>this is content for the header above</div>
So che sarebbe più facile per posizionare il contenuto all'interno della direttiva articolo, tuttavia questa domanda è quello di trovare il modo di risolvere una situazione come questa.
La direttiva sul contenuto può passare in qualche modo alla direttiva relativa dell'articolo?
Questo codice non è molto utile come lo è ora, ma è un punto di partenza. Come potrei realizzare questo?
.directive('article', function(){
return {
restrict: "A",
controller: function($scope) {
$scope.contentElement = null;
this.setContentElement = function(element) {
$scope.contentElement = element;
}
},
link: function(scope, element) {
element.bind('click', function(){
// Show article-content directives that belong
// to this instance (article1) of the directive
}
}
}
}
.directive('articleContent', function(){
return {
require: "article",
link: function(scope, element, attrs, articleCtrl) {
// Maybe reference the article i belong to and assign element to it?
// I can't though because these are siblings.
}
}
}
È interessante notare che, nel [$ compilare il codice sorgente di stringhe doc] (https://github.com/angular/angular.js/blob/master/src/ng/compile.js # L67) * siblingDirectiveName * è elencato come il primo possibile valore che la proprietà * require * può assumere. Sfortunatamente "siblingDirectiveName" non viene più menzionato nella documentazione e non ci sono esempi funzionanti. –