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/...