/ / AngularJS: Jak przekazać wiele parametrów do kontrolera przez ng-href? - javascript, angularjs, mean-stack

AngularJS: Jak przekazać wiele parametrów do kontrolera przez ng-href? - javascript, angularjs, mean-stack

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 № 1

Jeś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 ...