J'utilise ng-submit sur un formulaire pour transférer des données vers une base Firebase, tout fonctionne comme prévu. Ce que je voudrais faire, c’est changer de vues en même temps. Sur le bouton d'envoi, j'ai configuré ng-click pour exécuter une fonction à l'aide de $ location. Si je place ma fonction changeView dans une méthode .controller, je ne peux pas utiliser $ location (plus précisément, il indique - "Erreur:" non défini "n'est pas un objet (évaluation de" $ location.path ")"). Toute aide serait super duper.
// This doesn't work and throws the error
myApp.controller('CtrlName', ['$scope', 'angularFireCollection',
function($scope, angularFireCollection, $location) {
$scope.changeView = function(view) {
$location.path(view);
}
}
]);
// This works as expected, but I'm name spacing my functions globally and I will have to change how I'm accessing my Firebase, which isn't really desired.
function CtrlName($scope, angularFireCollection, $location) {
$scope.changeView = function(view) {
$location.path(view);
}
}
Voici mon modèle:
<form role="form" ng-submit="tactics.add(tactic)">
<div class="form-group">
<label>Select Method</label>
<select class="form-control" ng-model="tactic.type">
<option>Email</option>
<option>Display</option>
<option>SMS</option>
<option>Print</option>
</select>
</div>
<button type="submit" class="btn btn-success" ng-click="changeView('/my-tactics')">Save</button>
</form>
Vous n'injectez pas l'objet $location
dans votre contrôleur. Il est répertorié dans les paramètres de votre fonction mais vous avez oublié de l'ajouter à la liste avant cette fonction.
myApp.controller('CtrlName', ['$scope', 'angularFireCollection','$location',
function($scope, angularFireCollection, $location) {
...
}]);
N'oubliez pas non plus d'ajouter $ location dans votre action:
authControllers.controller('AuthRegisterCtrl', ['$scope', '$http', '$location',
function ($scope, $http, $location) {
$scope.master = {};
$scope.save = function (user) {
$scope.master = angular.copy(user);
$http({
method: 'POST',
url: '/angular/auth/register',
data: user
}).success(function (d) {
$location.path('/login');
});
};
}]);
Sainte vache, je ne peux pas croire que je le faisais jamais. #Facepalm. Voici la bonne façon de rediriger une soumission de formulaire.
Modèle
<form role="form" ng-submit="vm.submit(tactic)">
<div class="form-group">
<label>Select Method</label>
<select class="form-control" ng-model="tactic.type">
<option>Email</option>
<option>Display</option>
<option>SMS</option>
<option>Print</option>
</select>
</div>
<button type="submit" class="btn btn-success">Save</button>
</form>
Manette
angular.module('MyApp')
.controller('CtrlName', function($scope, $location, $log, angularFireCollection, tactics) {
var vm = this;
vm.submit = function submit(item) {
tactics.add(item)
.then(function(rsp) {
$log.debug('Attempted to add tactic to Firebase', rsp);
$location.path('/my-tactics');
});
};
}
);
Changements notables: