首先,对于angularJS是新手,很抱歉,如果这个问题很简单,但我的最终目标是在输入新的降价文件时更改我的模板。所以现在我的指令看起来像这样:
app.directive('markdown', function() {
return {
restrict: 'E',
replace: true,
scope: {
fileinput: '='
},
compile: function(elem, attrs) {
attrs.$observe("fileinput", function() {
elem.replaceWith(marked(markdownString));
});
}
}
});
我的html看起来像是这样的
<markDown md="test1.txt"></markDown>
<input type="file" name="filename" id="fileinput" ng-model="input">
其中test1.txt是一个markdown文件,我将viat的marked()函数转换为html。以下是我在test1.txt中读到的内容。
$("#fileinput").change(function (e) {
if (e.target.files != undefined) {
var reader = new FileReader();
reader.onload = function (e) {
markdownString = e.target.result;
};
reader.readAsText(e.target.files.item(0));
}
});
我可以完美地读取文件,但是在我打开并读取文件之前,该指令将替换HTML,这很好,但是我想更新指令并让它在我输入文件时再次运行。我已经尝试了两种方法。$观察和范围。$ watch,但似乎都不适合我,也许我只是写错了?
先谢谢!
修改<!/强> Fiddle 在下面的帮助下,我能够得到输入,但是现在它已经延迟了,不是我想要的。上传文件几次,看看我的意思。谢谢
答案 0 :(得分:1)
有一个lot of talk关于支持/不支持角度input type="file"
,但它们不支持绑定它。关键问题似乎是你只能读取文件输入属性,Angular的核心绑定概念是双向的。
tldr:
您不能使用ng-model
,但可以do it manually。