2016-03-03 33 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);”)。它将工作。 –