/ / AngularJS: як передавати декілька параметрів для контролера за допомогою ng-href? - javascript, angularjs, середній стек

AngularJS: як передавати декілька параметрів для контролера за допомогою ng-href? - javascript, angularjs, середній стек

У мене є таблиця з кнопкою редагування, щоб оновити запис. Коли я пройду сингл id до ng-href його правильна робота та сторінка відкриття форми:

Приклад: у моєму index.html стіл

<a class="btn btn-warning" ng-href="#/provider/{{row._id}}">Edit</a>

Але я хочу здати ще один параметр row._id до ng-href, як:

<a class="btn btn-warning" ng-href="#/provider/{{row._id}}/collectionName/{{collectionName}}">Edit</a>

Його не працює і переспрямовує на домашню сторінку.

Ось мій контролер:

    $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 для маршрутизації:

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"
});
}]);

Ось що саме я хочу зробити, після натискання edit кнопка повинна переадресовувати на form.html з параметром / data of id і collectionName

Будь-яка допомога буде вдячна.

Відповіді:

5 за відповідь № 1

Якщо ви хочете використовувати декілька параметрів у ng-href ви також повинні оновити URL маршруту в app.js.

коли ви використовували декілька параметрів у ng-href але маршрут, що відповідає цьому маршруту, не працював otherwise маршрут, який переспрямовує на home.

Ви можете спробувати це.

в html:

<a class="btn btn-warning" ng-href="#/provider/{{row._id}}/collectionName/{{collectionName}}">Edit</a>

додати маршрут у app.js люблю

.when("/provider/:id/collectionName/:cName", {
templateUrl: "templates/provider/form.html",
controller: "YourController"
});

і в контролері потрібно змінити, як:

 $http.get("/providerlist/"+$routeParams.id +"/collectionName/"+ $routeParams.cName)
.success(function (response) {
alert(response);
$scope.providerList = response;
$scope.id = response["_id"];
});

тому шлях на стороні сервера повинен бути таким: /providerlist/:id/collectionName/:cName


1 для відповіді № 2

Шлях в шляху ngRoute може містити імена груп, що починаються з двокрапки та закінчуються зірочкою, такими як: ім'я *, Всі символи охоче зберігаються в $ routeParams під іменем, коли маршрут збігається.

Наприклад, маршрути, такі як: / color /: color / largecode /: largecode * / edit

Для цього зразка URL: / color / brown / largecode / code / with / slashes / edit

І екстракт:

колір: коричневий

великакодекс: код / ​​з / косі риси.

Отже, у вашому випадку це буде Маршрут

.when("/provider/:id*/collectionName/:collectionName*", {
templateUrl: "templates/provider/form.html",
controller: "ProviderController",
controllerAs: "provider"
})

Це забезпечить, що навіть у випадку, якщо у вашій результуючої посилання href є спеціальні символи та прямі косу риси, ви переадресовуєтесь на відповідний контролер і сторінку ...