В Angular, как найти маршрут, который "вызвал" контроллер изнутри контроллера?
Я знаю, что для двух или более маршрутов можно использовать один и тот же контроллер. Однако, у диспетчера, я хотел бы знать, какой маршрут "назвал" его. Зачем? Какой маршрут определит, будет ли я загружать список записей, загружать одну запись по ее идентификатору или вообще ничего не загружать.
У меня есть следующая конфигурация маршрута:
angular.module("app").config(function ($routeProvider) {
$routeProvider.when("/", {
templateUrl: "home.html"
}).when("/records", {
templateUrl: "records.html",
controller: "RecordsController"
}).when("/record/create", {
templateUrl: "editRecord.html",
controller: "RecordsController"
}).when("/template/edit/:id", {
templateUrl: "editRecord.html",
controller: "RecordsController"
}).otherwise({
redirectTo: "/"
});
});
Я хочу использовать только один контроллер, поэтому у меня есть один:
angular.module("app").controller("RecordsController", function($http, $routeParams){
/* I know that if $routeParams.id exists, it probably the
/record/edit/:id route. But if $routeParams.id is null/undefined,
I don't know which of /records or /record/create "called"
this controller. I would like to know which route so I can
decide to load a list (if /records) or not (for /record/create).
*/
});
Если есть какие-то трюки, чтобы вытащить из конфигурации маршрута, как с разрешения, как-то?
Используйте $location.path()
из docs:
Служба $location анализирует URL-адрес в адресной строке браузера (на основе на window.location) и делает URL доступным для вашего приложения.
...
Методы Getter и setter
// get the current path
$location.path();
Для использования в контроллере
angular.module("app").controller("RecordsController", function($http, $routeParams, $location){
var path = $location.path();
// Do something with `path` ...
});
Demo
импортировать $locationProvider и выполнить проверку в вашем контроллере для $location.path()
if ($ location.path() == '/record ")
- Вопросы
- Angularjs-routing
- В Angular, как найти маршрут, который "вызвал" контроллер изнутри контроллера?