在文件阅读器的回调中更改相应的输入元素范围的属性?

时间:2013-08-07 19:35:43

标签: web-applications angularjs

参考问题File pick with Angular JS,在文件阅读器上加载时我想修改父范围的属性。考虑

$scope.fileLoaded = false; //initially
$scope.file_changed = function(element, $scope) {

 $scope.$apply(function(scope) {
     var photofile = element.files[0];
     var reader = new FileReader();
     reader.onload = function(e) {
        $scope.fileLoaded = true;  // I intend to do!
        ...
     };
     reader.readAsDataURL(photofile);
 });

});

我如何为HTML实现这一目标:

<input ng-model="photo"
   onchange="angular.element(this).scope().file_changed(this)"
   type="file" accept="image/*" />

每次出错都失败无法设置未定义属性'fileLoaded'。

1 个答案:

答案 0 :(得分:1)

一些事情。

  1. 使用ng-change代替onchange。
  2. 在指令中执行此操作。您不希望访问控制器中的元素。您可以双向绑定指令中的fileLoaded,这样您就可以在控制器中访问它,如果您真的愿意,或者您可以将所有功能封装到一个好的指令中。
  3. 我在一段时间之前写了一个类似的指令,你可以在这里查看:https://github.com/jrowny/SpriteHero/blob/master/js/directives/file.js我之前写过这篇文章之前我确实知道角度很好,所以它可能有点凌乱。此外,它不直接使用文件字段,只是从随机链接调用。

    如果你不早期掌握指令,那么Angular真是一团糟。否则就像你有一个只有几个梯级的梯子。