Angular.js: как я могу вернуть контент без просмотра? Возврат фида атома пользователям

Я планирую создать канал Atom внутри моего контроллера AngularJS. Я хочу создать представление, но не на стороне сервера, потому что я хочу заменить URI новым маршрутом AngularJS.

Теперь я знаю, как писать XML с помощью JavaScript, но понятия не имею, как вернуть XML-контент без представления.

Мои настройки маршрута вполне нормальны, как показано ниже. Он использует templateUrl для рендеринга частичного представления.

.when('/posts', {
            templateUrl: 'theme/post_list.html',
            controller: PostsController
        })

Можно ли обслуживать XML-контент без представления с помощью AngularJS? Вот так:

.when('/posts.atom', {
            controller: PostsController
        })

Генерация маршрутизированного Atom-канала angular.js на стороне сервера возможна, но я этого не хочу.


person ccoroom    schedule 16.06.2013    source источник
comment
кажется, вам нужно написать service   -  person Ivan Chernykh    schedule 16.06.2013
comment
@Cherniv Хорошо, я могу написать сервис или фабрику для создания потока атомов. А потом? Что я могу сделать, так это вызвать службу через контроллер и получить фид xml. Как я могу вернуть атом xml для клиента или браузера?   -  person ccoroom    schedule 16.06.2013
comment
Достаточно иметь один главный контроллер для работы с сервисами, нет? что такое атом xml?   -  person Ivan Chernykh    schedule 17.06.2013
comment
@Cherniv Это мой глупый вопрос. Это невозможно при программировании на стороне клиента. Я решил эту проблему с генерацией на стороне сервера.   -  person ccoroom    schedule 18.06.2013
comment
@Чернов В любом случае, спасибо за ответ.   -  person ccoroom    schedule 18.06.2013
comment
добро пожаловать, рад, что вы решили это   -  person Ivan Chernykh    schedule 18.06.2013


Ответы (1)


Используйте следующий процесс:

  • Добавьте <object> или <iframe> к DOM с XML внутри тега

OR:

  • Возврат Атома из сервиса
  • Сохранить в документеFragment
  • Используйте transformToFragment или DOMParser для создания представления
  • Используйте XMLSerializer, чтобы преобразовать представление в строку.
  • Вставьте в строку таблицу стилей XML:

    <?xml-stylesheet href="feed.css"?>
    
  • Используйте строку в качестве значения атрибута srcdoc:

    <iframe srcdoc="{{atomfeed}}" height="95%" width="100%">
    

Например:

$scope.atomstyle='<?xml-stylesheet href="feed.css"?>'
$scope.atomboilerplate='<feed xmlns="http://www.w3.org/2005/Atom">'
$scope.atomhead='<title></title><link></link>'
$scope.atomcontent='<entry><title></title><link></link></entry>';
$scope.atomtail='</feed>'

$scope.atomfeed=String().concat
 (
 $scope.atomstyle, 
 $scope.atomboilerplate,
 $scope.atomhead,
 $scope.atomcontent,
 $scope.atomtail
 )

Ссылки

person Community    schedule 16.04.2014