AngularJS: почему я не могу внедрить html на мой взгляд?

0

Я очень новичок в AngularJS, и я видел некоторые решения на SO, но из-за моей неопытности я не могу понять, как достичь своей задачи с этими решениями, поэтому я прошу о помощи, пожалуйста, несите меня, В принципе, по моему вопросу, мне нужно ввести и отобразить HTML-код на мой взгляд. Вот мой код:

HTML

<tabset panel-tabs="true" panel-class="panel-grape" ng-controller="MainController" data-heading="OTHER NEWS">
   <div ng-repeat="tab in baseString" ng-bind-html-unsafe="tab">

    </div>

</tabset>

и моя часть КОНТРОЛЛЕРА:

function createBase() {
    for (var i = 0; i < $scope.news.news[0].posizioni.length; i++) {
        // $scope.tabsName[i] = $scope.news.news[0].posizioni[i][i];
    $scope.baseString[i] =["<tab heading='" + $scope.news.news[0].posizioni[i][i] + "' ng-controller='MainController'><div class='col-xs-12 col-sm-6 col-md-6' id='colonaDx"+ $scope.news.news[0].posizioni[i][i] +"'></div><div class='col-xs-12 col-sm-6 col-md-6' id='colonaSx"+ $scope.news.news[0].posizioni[i][i] +"'></div><div id='paginaz"+ $scope.news.news[0].posizioni[i][i] +"'></div></tab>"];
    }
}

Мне нужно, чтобы tabsName оставался массивом.

За последние несколько часов я попробовал несколько решений, но до сих пор я не могу получить никаких результатов... пожалуйста, кто-нибудь может мне помочь? Заранее большое спасибо.

EDIT для лучшего понимания количества заголовков вкладки зависит от результатов json:

PORTION OF JSON:

    {
   "news":[
      {
         "posizioni":[
            {
               "0":"allNews"
            },
            {
               "1":"SecondTab"
            }
         ]
       }
]
}
  • 2
    какую версию Angular вы используете? А что именно не работает?
  • 0
    Чтобы уточнить, в Angular 1.2 был удален ng-bind-html-unsafe . Теперь это просто ng-bind-html . Возможно, вам придется использовать $sce.trustAsHtml() в вашей html-строке, прежде чем передавать ее в ng-bind-html-unsafe .
Показать ещё 15 комментариев

2 ответа

1

В Angular HTML в вашем контроллере есть красный флаг; это неправильное место.

Вместо этого используйте ng-repeat, рядом с тем, что вы пробовали, для создания HTML, вот краткий пример.

В вашем контроллере просто сохраните данные:

$scope.data = {
    "news": [
        {"posizioni": [
            {"0": "allNews"},
            {"1": "SecondTab"},
        ]}
    ]
};

В HTML ваш ng-repeat может выглядеть так: из-за структуры JSON выше, он становится немного грязным, но он выполняет свою работу:

<tab ng-repeat="(key, name) in data['news'][0]['posizioni']" heading="{{ tab.key }}" ng-click="selectTab($event, key, name)">{{ name[key] }}</tab>

В скрипте я добавил обработчик щелчка, чтобы показать, как вы можете реагировать на клик, который произошел в TabController, для обновления данных в ContentController через службу. Обратите внимание: ContentService содержит массив данных, но вы можете обновить его, чтобы динамически запрашивать контент с восходящего сервера:

$scope.selectTab = function (event, key, name) {
    ContentService.setContent(key);
}
  • 0
    В том-то и дело, но что касается его JSON, он на самом деле не может использовать ng-repeat с ним. Или, по крайней мере, не чистый. Просто попробуйте с его образцом и скажите мне, если вы найдете способ.
  • 0
    @Okazari, посмотри, я думаю, что это работает.
Показать ещё 9 комментариев
0

просто переместите html строку с вашего контроллера на ваш html, как

<tabset panel-tabs="true" panel-class="panel-grape" ng-controller="MainController" data-heading="OTHER NEWS">
    <tab  ng-repeat="tab in news.news[0]" heading='{{tab[$index]}}' ng-controller='MainController'>
        <div class='col-xs-12 col-sm-6 col-md-6' id='colonaDx{{tab[$index]}}'></div>
        <div class='col-xs-12 col-sm-6 col-md-6' id='colonaSx{{tab[$index]}}'></div>
        <div id='paginaz{{tab[$index]}}'></div>
    </tab>
</tabset>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню