Ho una direttiva con ambito isolato che prende una variabile portata per riferimentoAngularJs: Perché l'ambito all'interno della mia direttiva non si aggiorna quando arrivano i dati asincroni?
angular.module('myApp')
.directive('myDirective', function() {
return {
scope: {
items: '='
},
templateUrl: 'template.html',
replace: true,
controller: 'myDirectiveCtrl',
controllerAs: 'ctrl'
};
})
.controller('myDirectiveCtrl', function($scope) {
this.items = $scope.items;
});
Questo viene fatto passare in questo modo:
<div my-directive items='items'></div>
Nei dati controllore esterno è asincrono caricato e gli articoli ambito passato nella direttiva aggiornata:
angular.module('myApp', [])
.controller('myCtrl', function($scope) {
$scope.setItems = function() {
$scope.items = [
'Here',
'There',
'Everywhere'
];
};
});
Quando i dati viene caricato, il campo di applicazione al di fuori i miei aggiornamenti direttiva, ma dentro lo fa Non
mio html:
<div my-directive items='items'></div> <!-- this doesn't update -->
Outside directive
<ul ng-repeat='i in items'> <!-- this does update -->
<li>{{i}}</lu>
</ul>
<button ng-click="setItems()">Set items</button>
Come posso ottenere la mia portata dentro la mia direttiva per aggiornare? Ho
Grazie per questo. L'uso del controller è stato influenzato da questo post sul blog: http://teropa.info/blog/2014/10/24/how-ive-improved-my-angular-apps-by-banning-ng-controller.html –
Non ho detto che non dovresti usare un controller. Intendevo che la variabile esposta all'oscillazione non doveva essere assegnata alla variabile del controllore. –
@SteveLorimer, ho modificato la risposta con un altro approccio con 'bindToController' per far funzionare il tuo esempio –