Задать вопрос
tomgif
@tomgif
Веб-разработчик

Как скомпилировать директиву полученную из json?

Подгружаю html из json.
Контроллер вьюхи:
$http.get('/content/' + page + 'index.json')
  .then(function successCallback(response) {
    var html = response.data.html;
      $scope.data = {
        name: response.data.name,
        class: response.data.type ? 'is-' + response.data.type : '',
        content: $sce.trustAsHtml(html)
      };
  }, function errorCallback(response) {
      alert('404');
      $location.path('/' + Lang.get() + '/');
});


Директива
angular.module('scrollbar', [])
.directive('ngScrollbar', ['$compile', function($compile) {
  return {
    restrict: 'A',
    link: function(scope, element, attrs) {
      console.log('compiled')
    }
  }
}]);


Образец json
{
	"name": "Климат",
	"html": "<div data-ng-scrollbar><p>Этот период отличает наибольшее число осадков, наличие штормов и северного ветра. Теплая погода наступает на полуострове внезапно, но именно в марте и апреле разница между дневной и ночной температуры ощущается особенно сильно.</p></div>"
}
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
ozknemoy
@ozknemoy
яваскриптист
первая часть уже выполнена($sce.trustAsHtml(html)). осталось во вью директиву ng-bind-html="data.content" но ангуларовские фишки не работают от такого способа. поэтому берем не директиву scrollbar а компонент пробрасываем через биндингс содержимое html с сервера и в методе $onChanges компилим этот html:

this.$onChanges = (changes)=> {
if(changes.nameOfBinding && changes.nameOfBinding.currentValue ) {
var element = $compile(changes.nameOfBinding.currentValue)($scope);
 $element.append(element )
}
  
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Можно воспользоваться ng-bind-html
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы