使用AngularJS和innerHTML

ogsagwnx  于 2023-04-19  发布在  Angular
关注(0)|答案(3)|浏览(127)

我有一些AngularJS的东西,它保存了一堆数组和数据。一旦用户上传了一个文件,文件就会被解析并保存到包含不同数组的作用域中。然而,在所有这些之后,文件被保存在作用域中,我试图更新innerHTML,但AngularJS代码不起作用。我使用ng-repeat创建一个基于数组的表,但是它仍然是具有看起来像{{column}}等的内容的单个单元。
我在使用指令和模板时遇到了极大的困难,因为我的index.html说,当我执行app.directive(...之类的操作时,appmodule等都是未定义的
我的index.html文件的重要部分包括:

<html ng-app>
... //once a file is uploaded, total.js is called;
//this was so the app didn't try to run before a file was uploaded
<div id="someStuff">This will become a table once a file is uploaded</div>

这是一个简单的例子,说明了我是如何在total.js中设置作用域的:

function sheet($rootScope, $parse){
    $rootScope.stuff = text; 
//text is a variable that contains the file's contents as a string
};

document.getElementById('someStuff').innerHTML="<div ng-controller='sheet'>{{stuff}}</div>";

HTML发生了变化,但它并没有打印文件的内容,而是只打印了{{stuff}}。我怎么才能让innerHTML理解它包含AngularJS,最好不要使用partial或指令,除非你能彻底解释我在哪里输入它和它的语法。

**编辑1:**我试过使用$compile,但它被标记为undefined。我看了this来解决编译问题,但我不明白rtcherry的语法,以及如何将其应用到我自己的代码中。
**编辑2:**我仍然收到$compile undefined错误,当我这样包含它时:

function sheet($rootScope, $parse, $compile){...};
document.getElementById('someStuff').innerHTML=$compile("<div ng-controller='sheet'>
{{stuff}}</div>")(scope);

**编辑3:**虽然itcouldevenbeaboat的评论是非常没有帮助的,我决定我也许应该告诉你我试图这样做的指令方式.

我在我的工作表函数中包含了以下代码:

var app = angular.module('App', []);
app.directive('spreadsheeet', function($compile){
    return{
        templateUrl: innerHTML.html
    }
});

innerHTML包含<div ng-controller='sheet'>{{stuff}}</div>,index.html包含<div spreadsheet></div>
这样,我就不会收到任何错误,但是文本不会显示出来,无论是作为{{stuff}}还是作为文件的内容。即使我做一些简单的事情,比如提供template: "<h2>Hello!</h2>"而不是templateUrl,我也不能让Hello!打印出来。

2hh7jdfx

2hh7jdfx1#

对我很有效

document.getElementById('someStuff').innerHTML = "<div ng-controller='sheet'>{{stuff}}</div>";
$compile( document.getElementById('someStuff') )($scope);
gcxthw6b

gcxthw6b2#

简单的解决方案(它将工作100%):
在controller中,别忘了在controller中注入$document作为依赖,如下所示:

App.controller('indiaController', function ($scope, $document,$filter, $location) {

    var text_element = angular.element($document[0].querySelector('#delhi');
    text_element.html('your dynamic html placed here');
}
jtjikinw

jtjikinw3#

ngBindHtml

  • 模块ng中的指令

计算表达式并以安全的方式将生成的HTML插入到元素中。默认情况下,生成的HTML内容将使用$sanitize服务进行清理。要使用此功能,请确保$sanitize可用,例如,通过在模块的依赖项中包含ngSanitize为了在模块的依赖项中使用ngSanitize,您需要在应用程序中包含“angular-sanitize.js”。
用途

as element:
<ng-bind-html
      ng-bind-html="expression">
    ...
    </ng-bind-html>
as attribute:
<ANY
      ng-bind-html="expression">
    ...
    </ANY>

相关问题