为什么用javascript编辑输入文本不要更新angularJs变量?

时间:2014-04-08 20:35:06

标签: javascript forms angularjs

我想通过将文件复制到输入文本来加载文本文件并将文件的文本放在AngularJS变量中。

这个js将文本放在输入字段:

document.getElementById('JSONFile').addEventListener('change', readFile, false);

function readFile(evt) {
    var files = evt.target.files;
    var file = files[0];
    var reader = new FileReader();

    var input = document.getElementById('jsontext');

    reader.readAsText(file);
    reader.onload = function () {
        input.value = this.result;
    };
}

输入字段绑定到AngularJS变量:

<input type="text" ng-model="jsontext" id="jsontext" />

但是只有当我在文本输入上手动更改某些内容时才更新变量,以进行测试:

http://jsfiddle.net/uuuW6/

1 个答案:

答案 0 :(得分:0)

我不知道你在input_fiddle引用了什么,但我看到你只是试图将变更处理程序绑定到某些输入。它不起作用的原因是在AngularJS中,digest loop通过watches处理数据更改。

要在不受范围限制的上下文中更改数据,您可以调用$apply来激活摘要周期(或使用apply函数包装该代码),或者只使用经典的Angulary方式,并通过指令绑定更改处理程序,例如:

$scope.$apply(function () {
    input.value = this.result;
});

进一步阅读