2015-05-27 67 views
2

我是Angular.JS的新手&目前正在開展我的第一個項目。我有一整頁的那種如何解析Angular.JS中的變量的HTML內容?

<h1>Title</h1> 
 
<p>Teaser</p> 
 
<p>(a link)</p>
的傳情 可以包括HTML格式化或類似的 &amp;元素的條目。我想要做的是「解析」這個Teaser,以便瀏覽器(目前Google Chrome)能夠正確「理解」格式。

對於詳細頁面,一個id被傳遞給shownews,但是第一個呼叫沒有一個id來讀取所有來自哪裏的消息,用戶可以通過每個新聞鏈接到達詳細頁面。在這裏,我已經遇到了同樣的問題。下面,你看到Angular.JS代碼爲兩個主要的新聞頁面和詳細信息頁面,在那裏我可以通過使用ng-bind-html指令如下解決的詳細信息頁面的問題:

\t $scope.shownews = function(id) { 
 

 
\t if (typeof id === 'undefined') { 
 
\t  $http({ 
 
\t  method: 'GET', 
 
\t  url: 'http://dev.ivm.at/getallnews.php' 
 
\t  }). 
 
\t  success(function(data, status, headers, config) { 
 
\t   $scope.allnews = data; 
 
\t   $scope.myHTML = []; 
 

 
\t   for (var i = 0; i < $scope.allnews.length; i++) { 
 
\t   $scope.myHTML[i] = $scope.allnews[i].Teaser; 
 
\t   } 
 
\t  }); 
 
\t } else { 
 
\t  $http({ 
 
\t  method: 'GET', 
 
\t  url: 'http://dev.ivm.at/getnews.php?ID=' + id 
 
\t  }). 
 
\t  success(function(data, status, headers, config) { 
 
\t   $scope.singlenews = data; 
 
\t   $scope.Newstitel = $scope.singlenews[0].Title 
 
      //[...] 
 
\t   $scope.Inhalt = $scope.singlenews[0].Inhalt; 
 
\t   //[...] 
 
\t   $scope.myHTML = "<h1>" + $scope.Newstitel + "</h1><br>" + $scope.Inhalt; 
 
\t  }); 
 
\t } 
 
\t }
<div data-role="page" id="allnews"> 
 
    <div id="sub"> 
 
    <section class="blog"> 
 
     <article ng-bind-html="myHTML" ng-repeat="news in allnews"> 
 
     <h1>{{news.Title}}</h1> 
 
     <p>{{myHTML[$index]}}</p> 
 
     <p class="readmore"> 
 
      <a href="onenews" ng-click="shownews(news.ID)"> 
 
        Weiterlesen: {{news.Title}} 
 
      </a> 
 
      <span class="readmore_icon"></span> 
 
     </p> 
 
     </article> 
 
    </section> 
 
    </div> 
 
</div>

我的問題是如何正確使用ng-bind-html命令,以便在它是一組文本的情況下解析$scope.myHTML

謝謝你的回答!

+2

而不是解析數組,只需要給ng-bind-html加上require字段。例如:

Gayathri

+0

我該怎麼做?我不知道主頁上的新聞數量。每個新聞都有一個傳情。在具有唯一消息的詳細頁面的情況下,這不是問題。我在控制器內部創建'$ scope.myHTML',這是一個字符串,而不是數組。 – Sae1962

回答

3

要做到這一點,您需要使用$sce angularjs內置服務來解析之前保護HTML內容。

HTML瀏覽:

<span ng-bind-html="toTrustedHTML(html)"> 

控制器:

angular.module('myModule').controller('myController', function($scope, $sce){ 
    $scope.toTrustedHTML = function (html) { 
    return $sce.trustAsHtml(html); 
    }; 
}); 

UPDATE:

您可能需要使用ngSantize和還請檢查以下URL其中包含一個解鎖程序,說明您需要$sce.trustAsHtml()方法。

+0

噢,信任不是我目前的擔心。我需要的是數組變量'$ scope = myHTML []'中的文本格式正確。我仍然有寫作'&'的&符號。實際上,我已經爲單一新聞提供瞭解決方案,而無需保護它,而且它很有效。 – Sae1962

+0

@ Sae1962:您可能需要檢查我剛添加到答案的當前更新 – phikry

+0

謝謝!我改變了以下幾行:'var app = angular.module(「MyApp」,['ngSanitize']);','app.controller(「PostsCtrl」,function($ scope,$ http,$ sce){... '和'$ scope.toTrustedHTML = function(html){return $ sce.trustAsHtml(html);}',但得到錯誤信息'錯誤:Unknown provider:$ sceProvider < - $ sce(angular.js:5601) '。在HTML文件中,我還添加了'>後面加上''。你認爲會導致錯誤的原因是什麼? – Sae1962