Angular:ng-bind-html过滤掉ng-click?

Squ*_*ler 30 angularjs

我有一些html数据,我从一个json文件加载.

我在我的应用程序中使用ngSanitize并使用ng-bind-html显示此html数据.

现在我想从标准转换json blob中的任何链接

  • <a href="some_link">link</a>

至:

  • <a ng-click="GotoLink('some_link','_system')">link</a>.

所以我在json文件上做了一些regExp来转换链接,但是由于某些原因,ng-bind-html过滤了输出中的ng-click,我无法弄清楚原因.它是否应该这样做,如果是这样可以禁用此行为?

看看这个jsFiddle进行演示:http: //jsfiddle.net/7k8xJ/1/

有任何想法吗?

dav*_*ave 44

好的,所以问题是它没有编译你包含的html(angular没有解析它来查找指令和诸如此类的东西).想不出一种方法可以让它从控制器中编译,但你可以创建一个包含内容的指令,并编译它.

所以你会改变

<p ng-bind-html="name"></p>
Run Code Online (Sandbox Code Playgroud)

<p compile="name"></p>
Run Code Online (Sandbox Code Playgroud)

然后为js:

var myApp = angular.module('myApp', ['ngSanitize']);
angular.module('myApp')
.directive('compile', ['$compile', function ($compile) {
  return function(scope, element, attrs) {
    scope.$watch(
      function(scope) {
        return scope.$eval(attrs.compile);
      },
      function(value) {
        element.html(value);
        $compile(element.contents())(scope);
      }
   )};
  }]).controller('MyCtrl', function($scope) {
    var str = 'hello http://www.cnn.com';
    var urlRegEx = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g;
    result = str.replace(urlRegEx, "<a ng-click=\"GotoLink('$1',\'_system\')\">$1</a>");
    $scope.GotoLink = function() { alert(); }
    $scope.name = result;
});
Run Code Online (Sandbox Code Playgroud)

Angular 1.2.12:http://jsfiddle.net/7k8xJ/4/

Angular 1.4.3:http://jsfiddle.net/5g6z58yy/(与以前相同的代码,但有些人说它在1.4上不起作用.*)