无法动态加载 html 文件并解析 html 文件中的所有 angularjs 指令

Failing to load html file dynamically and parsing all angularjs directives in html file

所以我建立了一个网站,我希望将其他 .html 文件动态加载到 div 中。每个 .html 文件都包含一些内容,但 1 个 .html 文件包含其自己的 angularjs 指令。

我正在使用 ng-bind-html 以及 $scope.content = $sce.trustAsHtml(data) ; 但我发现这会打印出 html raw(不处理任何 angular 指令)。

我尝试过使用各种解决堆栈溢出的方法,但 none 对我有用。

网站:http://algorithmictrading.azurewebsites.net/

App.js: http://algorithmictrading.azurewebsites.net/js/app.js

正在加载的 .html 页面示例: http://algorithmictrading.azurewebsites.net/includes/home.html http://algorithmictrading.azurewebsites.net/includes/about_us.html

.html 包含 angular 指令的页面: http://algorithmictrading.azurewebsites.net/includes/download.html

如您所见,如果您导航到该网站并单击 'download' 选项卡,则会加载内容,但不会处理下拉菜单中的 angular。我添加的测试按钮也应该会产生一个警告框。

现在,代码基于此线程: call function inside $sce.trustAsHtml() string in Angular js

谢谢!

这周遇到了同样的问题,我发现让它起作用的最好方法是创建一个名为 "BindComponent" 的自定义指令。 将 ng-bind-html 指令更改为自定义指令,并在 link 方法中放置以下内容:

element.html(markupModel);
$compile(element.contents())(scope);

markupModel 可以是带有 html 代码的字符串,或者您可以使用 $templateCache($templateCache docs) 从 .html 文件中获取代码。

我发现如果我在将它们传递到模板之前没有通过 $sce.trustAsHtml 方法传递它们,angular 会从 html 字符串中剥离指令:

$sce.trustAsHtml('<a href="/some-link" directive-example>link to add</a>');

这与要插入 html 的元素内容上的 watch/compile 相结合似乎可以解决问题:

scope.$watch(getStringValue, function() {
    $compile(element, null, -9999)(scope);    
});

看看这个例子:http://plnkr.co/edit/VyZmQVnRqfIkdrYgBA1R?p=preview