Mam tabelę zawierającą przycisk edycji, aby zaktualizować rekord. Kiedy przechodzę samotnie id
do ng-href
działa dobrze i otwiera stronę formularza:
Np .: w moim index.html
stół
<a class="btn btn-warning" ng-href="#/provider/{{row._id}}">Edit</a>
Ale chcę przekazać jeszcze jeden parametr wraz z row._id
do ng-href jak:
<a class="btn btn-warning" ng-href="#/provider/{{row._id}}/collectionName/{{collectionName}}">Edit</a>
Nie działa i przekierowuje do strony głównej.
Oto mój kontroler:
$timeout(function () {
if ($routeParams.id !== undefined) {
$http.get("/providerlist/"+$routeParams.id, {
params:{
id:$routeParams.id,
collectionName:$routeParams.collectionName
}
}).success(function (response) {
alert(response);
$scope.providerList = response;
$scope.id = response["_id"];
});
}
});
app.js
do trasowania:
var ProviderApp = angular.module("ProviderApp", ["ngRoute"])
.config(["$routeProvider", function ($routeProvider) {
$routeProvider
.when("/home", {
templateUrl: "templates/home/index.html",
controller: "HomeController",
controllerAs: "home"
})
.when("/provider", {
templateUrl: "templates/provider/index.html",
controller: "ProviderController",
controllerAs: "provider"
})
.when("/provider/:id", {
templateUrl: "templates/provider/form.html",
controller: "ProviderController",
controllerAs: "provider"
})
.otherwise({
redirectTo: "/home"
});
}]);
Tutaj dokładnie chcę zrobić po kliknięciu edit
przycisk, do którego ma przekierowywać form.html
z parametrem / danymi id
i collectionName
Każda pomoc będzie doceniona.
Odpowiedzi:
5 dla odpowiedzi № 1Jeśli chcesz używać wielu parametrów w formacie ng-href
należy również zaktualizować adres URL trasy w formacie app.js
.
gdy użyłeś wielu parametrów w ng-href
ale żadne dopasowanie trasy do tej trasy nie zadziałało otherwise
przekieruj to przekierowanie do home
.
możesz tego spróbować.
w html:
<a class="btn btn-warning" ng-href="#/provider/{{row._id}}/collectionName/{{collectionName}}">Edit</a>
dodaj trasę w app.js
lubić
.when("/provider/:id/collectionName/:cName", {
templateUrl: "templates/provider/form.html",
controller: "YourController"
});
aw kontrolerze trzeba zmienić, na przykład:
$http.get("/providerlist/"+$routeParams.id +"/collectionName/"+ $routeParams.cName)
.success(function (response) {
alert(response);
$scope.providerList = response;
$scope.id = response["_id"];
});
więc trasa po stronie serwera powinna wyglądać następująco: /providerlist/:id/collectionName/:cName
1 dla odpowiedzi nr 2
Ścieżka w ścieżce ngRoute może zawierać nazwane grupy zaczynające się od dwukropka i kończące się gwiazdką, na przykład: nazwa *, Wszystkie znaki są chętnie przechowywane w $ routeParams pod podaną nazwą, gdy trasa się zgadza.
Na przykład trasy takie jak: / kolor /: kolor / largecode /: largecode * / edit
W przypadku tego przykładowego adresu URL: / kolor / brązowy / largecode / code / with / slash / edit
I wyodrębnij:
kolor: brązowy
largecode: kod / z / ukośnikami.
Więc w twoim przypadku tak będzie Trasa
.when("/provider/:id*/collectionName/:collectionName*", {
templateUrl: "templates/provider/form.html",
controller: "ProviderController",
controllerAs: "provider"
})
Zapewni to, że nawet jeśli w wynikowym łączu href znajdują się znaki specjalne i ukośniki, zostaniesz przekierowany do odpowiedniego kontrolera i strony ...