2015-07-17 3 views
0

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

и моя часть CONTROLLER:

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:

часть JSON:

{ 
    "news":[ 
     { 
     "posizioni":[ 
      { 
       "0":"allNews" 
      }, 
      { 
       "1":"SecondTab" 
      } 
     ] 
     } 
] 
} 
+2

, что версию Angular вы используете? А что именно не работает? –

+0

Чтобы уточнить, 'ng-bind-html-unsafe' был удален в Angular 1.2. Теперь это просто 'ng-bind-html'. Возможно, вам придется использовать '$ sce.trustAsHtml()' в вашей строке html, прежде чем передавать его в 'ng-bind-html-unsafe'. –

+0

@DanPantry v1.2.20 – FabioEnne

ответ

1

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

Вместо этого используйте ng-repeat, рядом с тем, что вы пробовали, чтобы построить HTML, here's a quick example.

В контроллере, просто держать данные:

$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 с ним. Или, по крайней мере, не чистый. Просто попробуйте его образец и скажите мне, если вы найдете способ. – Okazari

+0

@Okazari, посмотрите, я думаю он работает. – berto

+0

Отличная работа, но я вообще не рекомендую использовать $ broadcast еще больше в $ root. Чтобы делиться данными между контроллерами, вы должны предоставить пример услуг. Несмотря на то, что $ broadcast работает, это не Хорошая практика. – Okazari

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> 
Смежные вопросы