2015-07-03 2 views
6

Привет, я не смог найти подходящее рабочее решение. Пожалуйста, помогите мне.динамически отображать HTML-страницы AngularJS

У меня есть одностраничное приложение с ui-selects на странице, в основном это список каталогов. Пользователь будет выбирать папки и, наконец, когда он/она выбирает HTML-файл в списке, я создаю URL-адрес, и я должен отображать html-файл в моем спа-центре. Мне удалось отобразить текстовые файлы, но я не знаю, как отображать html-файлы. Я попробовал ng-bind-html, но не знаю, как это отобразить.

Я получаю содержание HTML, используя $ http.get метод и сохранение содержимого HTML в переменной с именем «contentHTML» Мне нужно, чтобы показать, что

ответ

3

Ваш вопрос с угловой обеззараживание. Он не позволит вам использовать ng-bind-html, пока вы не вставьте свой HTML-контент в специальную переменную, помеченную как надежный HTML. Угловой заставляет вас делать это, чтобы вы знали, что вы очень четко говорите Угловое, что можно сделать эту разметку.

Это помогает защитить среднего разработчика от непреднамеренного ввода пользовательского ввода, что было бы очень опасно. Вы не хотите, чтобы пользователи отправляли javascript в поля ввода, а затем ваше приложение отображало этот скрипт прямо на странице где-то. Если это так, вредоносный скрипт будет запускаться при визуализации и может вызвать всевозможные хаосы.

Вам необходимо включить модуль ngSanitize в зависимости от вашего приложения.

var app = angular.module('myApp', ['ngSanitize']); 

Не забудьте включить в ваши ссылки на скрипт с угловым санированием.

<script src="//ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-sanitize.js"></script> 

Затем вам нужно пометить свой контент HTML, как безопасный для визуализации с использованием $sce службы.

app.controller('myController', function ($scope, $sce) { 
    $scope.trustedHtml = $sce.trustAsHtml(contentHTML); 
}); 

Только после этого будет ng-bind-html работы.

<div ng-bind-html="trustedHtml"></div> 

Демо: http://codepen.io/Chevex/pen/xGYydr?editors=101

+0

Привет, спасибо за подробный ответ, он работает, но показаны только текстовые элементы html, есть графики, диаграммы и таблицы в html-файле, они не отображаются. – clearScreen

+0

Думаете, вы можете дублировать это в [codepen] (http://codepen.io), чтобы я мог посмотреть? – Chev

+0

html, который я пытаюсь отобразить, находится в локальной интрасети, плохо пытайтесь создать html, а затем дублировать его в кодепе ... через ng-bind-html, необходимо ли, чтобы страница html была статичной? – clearScreen

3

Я думаю, что вы ищете ngInclude.
Вам даже не нужно обращаться с запросом AJAX, это сделано для вас.

Извлекает, компилирует и включает внешний фрагмент HTML.

Использование

<ANY 
    ng-include="path_of_your_file.html" 
    [onload="string"] 
    [autoscroll="string"]> 
    ... 
</ANY> 

Важные вещи, чтобы отметить:

  • Ваш HTML файл должен быть в том же домене или это становится сложнее (см Документах)
  • Это шаблон, который означает:
    • Все относительные пути будут относительно текущего пути, а не пути импортированного шаблона
    • Угловое в нем будут оценены
+0

привет, нг-включать не работает .... Файл HTML не в локальном каталоге, является то, что, почему его не получают нагруженный ? – clearScreen

+0

В каком каталоге это? Пока он находится в том же домене и с тем же протоколом, он будет работать. – Jerska

+0

@ swordfish12 Вы имеете в виду, что получаете html-файл из Интернета, другую веб-страницу? даже тогда ng-include работает – akashrajkn

2

Для отображения HTML от contentHtml вам нужно иметь DIV на вашей HTML странице, как:

<div ng-controller="htmlBucket"> 
    {{content}} 
</div> 

Затем в JavaScript вы должны иметь этот

app.registerCtrl('htmlBucket', function($scope) 
{ 
    $scope.content = $sce.trustAsHtml(contentHTML); 
}); 

Не забудьте указать ваши .js, jquery и угловую зависимость cies к вашему HTML

<script src="lib/jquery/jquery.js"></script> 
<script src="lib/angular/angular.js"></script> 

Надеюсь, это поможет.

+1

Это сделает кодировку разметки. Это приведет к тому, что строка «

приветствует»

«' '' '' '' <h1> hi </h1 > "' когда он отображает связанную переменную. – Chev

+1

Я пробовал это, но он отображает источник html ..... – clearScreen

+2

Да, вот что вы делаете: '<h1> hi </h1 >' на веб-страницу, он отобразит исходный код как отображаемое содержимое страницы , то есть вы буквально видите '

hi

', отображаемый на странице как обычный текст. [Demo] (http://codepen.io/Chevex/pen/YXeJxv) – Chev

1

Вы можете получить то, что ищете, используя ui-router. Here - ссылка для этого же.

используя ui-select, когда пользователь выбирает папки. напишите триггер события в своем контроллере, чтобы изменить URL-адрес на ваш предопределенный. используя $ stateProvider. Вы также можете увидеть их пример для того же here

Надежда, что помогает

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