输入更改时更新指令

时间:2014-06-25 20:09:29

标签: javascript html angularjs angularjs-directive

首先,对于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 在下面的帮助下,我能够得到输入,但是现在它已经延迟了,不是我想要的。上传文件几次,看看我的意思。谢谢

1 个答案:

答案 0 :(得分:1)

有一个lot of talk关于支持/不支持角度input type="file",但它们不支持绑定它。关键问题似乎是你只能读取文件输入属性,Angular的核心绑定概念是双向的。

tldr:

您不能使用ng-model,但可以do it manually