我有一些AngularJS的东西,它保存了一堆数组和数据。一旦用户上传了一个文件,文件就会被解析并保存到包含不同数组的作用域中。然而,在所有这些之后,文件被保存在作用域中,我试图更新innerHTML,但AngularJS代码不起作用。我使用ng-repeat
创建一个基于数组的表,但是它仍然是具有看起来像{{column}}
等的内容的单个单元。
我在使用指令和模板时遇到了极大的困难,因为我的index.html说,当我执行app.directive(...
之类的操作时,app
和module
等都是未定义的
我的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!
打印出来。
3条答案
按热度按时间2hh7jdfx1#
对我很有效
gcxthw6b2#
简单的解决方案(它将工作100%):
在controller中,别忘了在controller中注入$document作为依赖,如下所示:
jtjikinw3#
ngBindHtml
计算表达式并以安全的方式将生成的HTML插入到元素中。默认情况下,生成的HTML内容将使用$sanitize服务进行清理。要使用此功能,请确保$sanitize可用,例如,通过在模块的依赖项中包含ngSanitize为了在模块的依赖项中使用ngSanitize,您需要在应用程序中包含“angular-sanitize.js”。
用途