2016-03-03 65 views
0

我真正的新AngularJS。所以這個問題可能是非常基本的,但我沒有從其他文章得到明確的答案,所以我試圖提出一個新的問題。AngularJS NG綁定,HTML移除所有的腳本標籤

我woundering爲什麼angulars JS NG綁定,HTML去除我想在我的網站上粘貼內容的所有腳本標籤。

我只是從AngularJS文檔網站此代碼示例顯示了用內部Java腳本標籤的簡單綁定,HTML例子嘗試。

(function(angular) { 
    'use strict'; 
    angular.module('bindHtml', ['ngSanitize']) 
     .controller('Controller', ['$scope', function($scope) { 
      $scope.myHTML = 
       'I am an <code>HTML</code>string with ' + 
       '<a href="#">links!</a> and other <em>stuff</em>'+ 
       '<script type="javascript">' + 
       'alert(1);'+ 
       '</script>'; 

     }]); 
})(window.angular); 

此代碼片段顯示了HTML模板:

<body ng-app="bindHtml"> 
    <div ng-controller="Controller"> 
     <p ng-bind-html="myHTML"></p> 
    </div> 
</body> 

但Chrome檢查表明,AngularJS顯然取消了所有的Java腳本沒有警告消息。存在一種方法來繞過這種刪除或我必須重寫所有舊式jQuery和什麼JavaScript到AngularJS? Screenshot from code inspector of Chrome

謝謝

+0

試試這個$ sce.trustAsHtml($ scope.myHTML)。 –

+1

出於好奇,您將javascript內聯腳本注入模板的用例是什麼?爲什麼不在JavaScript中的應用程序邏輯中運行代碼? –

+0

是的,因此不存在一個好問題。該項目仍然是不同的框架,現在JS角也的拼裝....不過謝謝你$ sce.trustAsHtml是正確的軌跡。 –

回答

1

你需要注入$ SCE服務到您的控制器或指令等,並使用$ SCE服務是這樣的: -

$scope.myHTML= $sce.trustAsHtml("I am an <code>HTML</code>string with ' + 
       '<a href="#">links!</a> and other <em>stuff</em>'+ 
       '<script type="javascript">' + 
       'alert(1);'+ 
       '</script>"); 

而在你的HTML頁面如結合本;

<body ng-app="bindHtml"> 
    <div ng-controller="Controller"> 
     <p ng-bind-html="myHTML"></p> 
    </div> 
</body> 
+0

謝謝。它現在不會刪除腳本標記,但不會執行java腳本。恩,我測試一下,但你會得到一個複選標記。 –

+0

謝謝。這行得通。如果有人有同樣的問題,請不要使用我的示例與這個簡單的警報,因爲它不會工作,因爲它缺少「文檔準備功能」。您可以使用類似_ <我的onmouseout = 「警報(1);」>進出 _ –

+0

的document.ready是jQuery的功能。嘗試$ sce.trustAsJs( 「<腳本類型= '的javascript'>警報(1);」)。它將工作。 –