Angular - другой маршрут, тот же шаблон/контроллер, другой способ загрузки
Я хочу использовать маршруты, но я всегда хочу использовать тот же шаблон и контроллер. У меня есть такие маршруты:
**a/:albumid**
и
**i/:imageid**
В первом случае я хочу загрузить массив изображений и добавить их в список. Во втором случае я хочу загрузить одно изображение и добавить его в список.
Таким образом, разница заключается только в загрузке данных. Каков наиболее эффективный способ сделать это?
Также возможно анимировать ng-show? Что-то вроде jQuery slideDown?
Ответы
Ответ 1
Посмотрите эту статью, она описывает способ сделать именно то, что вы хотите:
http://www.bennadel.com/blog/2420-Mapping-AngularJS-Routes-Onto-URL-Parameters-And-Client-Side-Events.htm
Я использовал технику, она работает хорошо.
Вкратце, что-то вроде этого для маршрутизации:
$routeProvider
.when("/a/:album_id", {
action: "album.list"
}).when("/i/:imgid", {
action: "images.load"
})
Затем в вашем контроллере вы можете получить доступ к $route.current.action
и выполнить соответствующую задачу. Хитрость заключается в создании функции в вашем контроллере, которая выполняет всю работу (статья вызывает ее render()
), а затем вызывает эту функцию, когда запускается $routeChangeSuccess:
$scope.$on(
"$routeChangeSuccess",
function( $currentRoute, $previousRoute ){
// Update the rendering.
render();
}
);
Ответ 2
Я создал суперпростую директиву для обработки этого, что позволяет маршрутам быть более похожими на маршруты Rails или Codeigniter, где метод контроллера находится в определении маршрута. Имя метода задается в routeProvider.when параметры и директива установлены в шаблоне маршрута.
См.: fooobar.com/info/539624/...