Ich benutze ng-submit für ein Formular, um Daten in eine Firebase zu pushen. Alles funktioniert wie erwartet. Was ich gerne machen würde, ist, gleichzeitig die Ansichten zu ändern. Auf dem Submit-Button selbst habe ich ng-click gesetzt, um eine Funktion mit $ location auszuführen. Wenn ich meine changeView-Funktion in einer .controller-Methode platziere, kann ich $ location nicht verwenden (insbesondere heißt es: "Fehler: 'undefined' ist kein Objekt (wertet '$ location.path' aus)"). Jede Hilfe wäre 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);
}
}
Hier ist meine Vorlage:
<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>
Sie fügen das $location
-Objekt nicht in Ihren Controller ein. Es ist in Ihren Funktionsparametern aufgeführt, aber Sie haben vergessen, es der Liste vor der genannten Funktion hinzuzufügen.
myApp.controller('CtrlName', ['$scope', 'angularFireCollection','$location',
function($scope, angularFireCollection, $location) {
...
}]);
Vergessen Sie nicht, $ location in Ihre Aktion einzufügen:
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');
});
};
}]);
Heilige Kuh Ich kann nicht glauben, dass ich das je gemacht habe. #Facepalm. Dies ist der richtige Weg, um eine Formularübergabe umzuleiten.
Vorlage
<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>
Controller
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');
});
};
}
);
Bemerkenswerte Änderungen: