2015-06-04 3 views
1

Im пытается вывести html с угловым js. Я знаю, что html будет в порядке. Это то, что пытается им в настоящее время:Пытается вывести html с угловым js

<div class="items-list" id="items-container"> 
     <div ng-repeat="data in ItemsData track by $index" ng-bind-html='ItemsData'> 
      <-data-> 
     </div> 
    </div> 

И это то, что я очень много делаю с данными

$.ajax({ 
         method: "POST", 
         url: "{{URL::route('items')}}", 
         data: filteringData, 
         dataType: 'json' 
        } 
      ).done(function (response) { 
         $scope.ItemsData = $sce.trustAsHtml(response['items']); 
         $scope.ItemsPage += 1; 
         $scope.ItemsLastPage = response['lastPage']; 
         $scope.ItemsLoaderBusy = false; 
        }); 

Но это не работает. Я пытаюсь это сделать в течение длительного времени.

Я очень хочу, чтобы получить ответ с сервера. У него есть «предметы». Его массив элементов, которые являются html. Как я могу вывести их с повторением?

И я действительно не знаю, что я делаю. Спасибо за помощь.

+0

вы получаете какую-либо ошибку? Вы можете проверить консоль? – ShankarSangoli

+0

Спасибо за ответ. Да, я получаю эту ошибку Uncaught: [$ sce: itype] http://errors.angularjs.org/1.4.0/$sce/itype?p0=html Я знаю, что это связано с доверенным html-файлом. Но я не понимаю, почему. Как это должно работать тогда. – DaveLV2

+0

Я смущен кодом, который вы здесь написали. Если '$ scope.ItemsData' является строкой HTML, то как вы могли бы перебирать ее с помощью' ng-repeat'? Можете ли вы опубликовать несколько примеров того, что вы получаете в функции, и результат, который вы ожидаете? – Claies

ответ

1

Вы должны использовать переменную data, которую вы определили в ng-repeat для переплета внутри ng-bind-html. Так что измените ItemsData на data.

<div ng-repeat="data in ItemsData track by $index" ng-bind-html='data'> 
    <-data-> 
</div> 

Кроме того, как вы прокомментировали вопрос, который вы получаете сообщение об ошибке при выполнении $sce.trustAsHtml метода, это происходит потому, что вы передаете массив response['items'], когда он ожидает строку.

Предполагая, что response['items'] как массив строк, вы можете попробовать это.

$.ajax({ 
    method: "POST", 
    url: "{{URL::route('items')}}", 
    data: filteringData, 
    dataType: 'json' 
}).done(function(response) { 
    $scope.ItemsData = []; 
    angular.forEach(response.items, function(item) { 
     $scope.ItemsData.push($sce.trustAsHtml(item)); 
    }); 
    $scope.ItemsPage += 1; 
    $scope.ItemsLastPage = response['lastPage']; 
    $scope.ItemsLoaderBusy = false; 
}); 

Кроме того, как указал на @pankajparkar вы должны попытаться использовать $ HTTP вместо JQuery AJAX, потому что он будет работать цикл дайджеста.

+0

Я сделал это, но все равно получаю ту же ошибку – DaveLV2

+0

Попробуйте последние обновления в ответе. – ShankarSangoli

+0

Хорошо, ошибка исчезла. Теперь мне нужно только изменить его, чтобы использовать угловой http для правильной работы? – DaveLV2

2

Вы никогда не должны были использовать $.ajax, что должно быть заменено вызовом ajax с использованием службы $http. Использование $.ajax не будет работать переваривать цикл по его завершению, где $http мчит переваривать цикл после обратного вызова вызывается

Кроме того, ваши нг-связывание будет ng-bind-html="trustedAsHtml(data)"

тогда ваш контроллер будет иметь один метод trustedAsHtml, который HTML как доверенный с помощью $sce служба

$scope.trustedAsHtml = function(data){ return $sce.trustedAsHtml(data); }

+0

@ davelv2 это должно быть полезно для вас .. :) –

+0

@pankajpakar Ваше право тоже. Так спасибо за помощь! :) – DaveLV2

+0

делает, что часть $ sce была полезной ?? –

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