Sto migrando da ng-view a ui-view.AngularJS: ui-router Reindirizzare la vista su successo e aggiornare l'ambito con i nuovi contenuti
Nel mio controller, dopo aver creato/aggiornare/eliminare correttamente, vorrei reindirizzare a una vista indice con i dati appena aggiornati/creati/cancellati.
Attualmente lo faccio utilizzando $state.go
.
app.controller('AdminSupplierCreateController', ['$scope', '$state', 'Supplier',
function ($scope, $state, Supplier) {
$scope.h1 = "Register a new Supplier";
$scope.store = function()
{
Supplier.post($scope.supplier)
.then(
function() {
console.log("Successfully Created Supplier");
$state.go('admin.supplier');
},
function(response) {
console.log("Error with status code: " + response.status);
}
);
};
}]);
Il problema è che quando lo stato $ viene modificato, l'ambito non viene aggiornato. Sembra che i dati dello scope originale admin.supplier
non vengano aggiornati.
Ho provato ad aggiornare ui-view
con $state.reload()
prima di impostare l'ambito in AdminSupplierIndexController
.
app.controller('AdminSupplierIndexController', ['$scope', '$state', 'suppliers',
function ($scope, $state, suppliers) {
$state.reload();
$scope.suppliers = suppliers;
}]);
In questo modo si rende la richiesta GET a api/v1/suppliers
, ma in realtà non mostrano la portata aggiornato a meno che non sia colpito il pulsante di aggiornamento del browser o navigare manualmente ad uno stato diverso, quindi passare di nuovo.
$stateProvider
...
.state('admin.supplier', {
url : "/supplier",
templateUrl : 'templates/admin/supplier/index.html',
controller: "AdminSupplierIndexController",
resolve: {
suppliers: ['Supplier', function(Supplier) {
return Supplier.getList();
}]
}
})
.state('admin.supplier.create', {
url : "/create",
templateUrl : 'templates/admin/supplier/create.html',
controller: "AdminSupplierCreateController"
})
Soluzione:
app.controller('AdminSupplierCreateController', ['$scope', '$state', 'Supplier',
function ($scope, $state, Supplier) {
$scope.h1 = "Register a new Supplier";
$scope.store = function() {
Supplier.post($scope.supplier)
.then(
function() {
console.log("Successfully Created Supplier");
// Force Reload on changing state
$state.go('admin.supplier', {}, {reload: true});
},
function(response) {
console.log("Error with status code: ", response.status);
}
);
};
}]);
Molte grazie. Questo è stato risolto usando: '$ state.go ('admin.supplier', {}, {reload: true});' nella callback di successo di 'Supplier.post' – Gravy
Questo ha veramente aiutato e funziona esattamente come mi aspettavo a. – carbontwelve