Quindi ho appena iniziato ad utilizzare AngularJS e, a parte un piccolo inconveniente, sembra perfettamente a posto finora. Diciamo che ho due direttive, una delle quali richiede l'altro, in questo modo:AngularJS: templateUrl definisce la costruzione del controller, le interruzioni di codice dipendenti
angular.module('components', [])
.directive('outer', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
scope: {},
link: function(scope) { ... },
controller: function($scope) { ... },
templateUrl: 'outer.html' // Note this
};
})
.directive('inner', function() {
return {
require: '^outer', // And this
restrict: 'E',
...
link: function(scope, element, attrs, outerCtrl) { ... },
templateUrl: 'inner.html'
};
});
utilizzato nel qualcosa di HTML come questo:
<outer>
<inner></inner>
</outer>
Se outer.html
carichi prima inner.html
, allora non c'è problema a tutti.<outer>
viene trasformato correttamente e viene assegnato un ambito e un controller e <inner>
riceve quel controller correttamente.
Se i modelli di carico nell'ordine opposto, tuttavia, <inner>
è legata prima <outer>
s’di controllo è stato creato, e non riesce con il messaggio di errore‘Error: nessun controller: esterno’.
Ho provato allegando un ritardo carico lato server per inner.html
, e finchè outer.html
carichi prima, non ci sono problemi di sorta ovunque. Allo stesso modo, se inserisco il modello di outer
(ad esempio usando template
anziché templateUrl
), quel modello diventa disponibile per primo e tutto funziona splendidamente.
Qualcuno sa di un modo di utilizzare templateUrl
sulle direttive richieste da altre direttive? Nel mio codice attuale, è essenziale che la direttiva interna abbia accesso al controller esterno e preferirei preferibilmente losu template
perché il primo separa il layout dal comportamento e rende molto più semplice configurare i modelli anche dopo il comportamento. il codice è diventato grande.
Grazie in anticipo, e mi dispiace se questo è già stato chiesto prima; Non sono riuscito a trovare domande equivalenti su Stack Overflow.
Avevo questo problema esatto, ma non ho aiutato a modificare i livelli di priorità (non su 1.0.5 e non su 1.0.7 comunque). Nel mio caso è stato il 'inner' a dipendere da un controller dal 'outer' e non è un modo semplice per rompere quella dipendenza dal momento che ho molti 'inner' e fare qualcosa per uno richiede che le cose accadano agli altri (è una fisarmonica avanzata) . – ivarni