2016-06-14 2 views
0

У меня есть Угловое приложение с различными типами страниц, все идентифицированной слизняком сразу после базового URL, так как:Угловой открыт контроллер/представление на основе ответа сервера

http://example.com/slug-a 
http://example.com/slug-b 

Слаг А и В из различные типы и должны отображаться в другом представлении. Данные, принадлежащие объектам, идентифицированным с помощью slug a и b, извлекаются с сервера, и Угловое приложение должно изменить представление на основе типа объекта.

Можно ли обрабатывать это в $ routeProvider ngRoute? Я не могу найти никакой документации, которая помогает мне с этим, и я уверен, что я не первый, чтобы попробовать это ..

Так, короче говоря:

  • Клиент запрашивает пробкового A = > Угловые запрашивает данные с сервера => Угловые нагрузки ControllerA с шаблоном А.
  • клиента запрашивает пробковый B => Угловые запрашивают данные с сервера => Угловые нагрузками ControllerB с шаблоном B

Различного вида на основе ответ сервера.

+0

Это определение основного маршрута. у вас есть маршрут, настроенный в вашем приложении? https://docs.angularjs.org/api/ngRoute/provider/$routeProvider. –

+0

Да, у меня несколько маршрутов. Последний маршрут /: slug ловит все остальные маршруты. Угловые запросы данных с сервера (определенные параметром slug) и на основе возвращаемых данных Мне нужно отобразить определенный шаблон. (Например, slug может быть именем пользователя, страны или города. Пользователи, страны и города отображаются с использованием разных шаблонов) – Keugels

ответ

0

Я думаю, вы не можете сделать это в маршрутизаторе. Но вы можете перенаправить пользователя в другое место через службу $location. Как это

// somewhere inside your controller 
var promise = loadData().then(data => { 
    if (data.slugA) { 
     $location('path_to_slugA'); 
    } 
    else if (data.slugB) { 
     $location('path_to_slugB'); 
    } 
    else { 
    // do something else 
    } 
}); 
+0

Это не сработает. $ Location.path() больше не может измениться, так как пользователь уже имеет правильный URL-адрес. Необходимо только загрузить другой шаблон на основе данных, возвращаемых сервером. $ Location.path() не может измениться. – Keugels

+0

Я вижу ... в этом случае взгляните на эти два ответа http://stackoverflow.com/questions/24496201/load-html-template-from-file-into-a-variable-in-angularjs и http: //stackoverflow.com/questions/14788417/angular-load-template-from-url-and-compile-inside-div –

0

Ок, я решил его с помощью другого и гораздо более простой подход. (Не знаю, почему я не понять это до того)

$routeProvider.when('/:slug/', { 
    controller: 'SlugController', 
    template: '<div ng-include="template"></div>' 
}); 

Тогда SlugController делает запрос и загружает нужный шаблон, установив $ scope.template. В файле шаблона контроллер прикреплен к корневому элементу.

Простой, но эффективный .. :)

Смежные вопросы