aggiornamento: deve essere stato qualcosa di stupido in un'altra parte del codice. Funziona ora, quindi la sintassi bindToController va bene.AngularJS 1.4 direttive: scope, a due vie vincolante e bindToController
Stiamo utilizzando AngularJS 1.4, che ha introdotto un new way to use bindToController in direttive.
Dopo un bel po 'di lettura (e forse non capire tutto), abbiamo definito la nostra direttiva come questa:
.directive('mdAddress', function mdAddress() {
var directive = {
restrict: 'EA',
scope: {},
bindToController: {
address: '='
},
templateUrl: 'modules/address/address.html',
controller: AddressController,
controllerAs: 'dir'
};
Chiamarlo da un'altra vista in questo modo:
<md-address address="vm.address"></md-address>
Avendo già definito nel controller della vista:
vm.address = {
street: null,
countryCode: null,
cityCode: null,
postalCode: null
};
Riferimento alle variabili in th e direttiva modello come questa:
<md-input-container>
<label>{{'ADDRESSNUMBER' | translate}}</label>
<input type="number" ng-model="dir.address.streetNumber">
</md-input-container>
Abbiamo trascorso 4 ore cercando di capire perché la nostra direttiva non funzionava. Bene, funzionava, ma il collegamento bidirezionale tra il controller e la direttiva non lo era, vm.address.street
era irrimediabilmente impostato su null.
Dopo un po ', abbiamo appena provato il vecchio modo:
.directive('mdAddress', function mdAddress() {
var directive = {
restrict: 'EA',
scope: {
address: '='
},
bindToController: true,
templateUrl: 'modules/address/address.html',
controller: AddressController,
controllerAs: 'dir'
};
E magicamente funzionato. Qualche idea PERCHÉ?
Cosa hai nel tuo modello 'modules/address/address.html'? Se si sta tentando di fare riferimento a 'vm' nel modello, ciò causerebbe un problema nullo poiché' vm' non esiste nell'ambito della direttiva. Anche se si stava tentando di associare semplicemente 'indirizzo' nel modello direttiva, anche questo non esisterebbe dato che si sta vincolando il controller come' dir', quindi dovrebbe essere 'dir.address' –
In il modello abbiamo fatto riferimento agli elementi con 'dir':' '. Ho modificato il post principale per chiarire questo. Grazie. – LeoLozes
Per favore, fornire due plunkers, per entrambi i casi. C'è una spiegazione semplice per questo, ma il testo in chiaro non dà un'idea chiara di ciò che hai fatto esattamente. – estus