0

参考问题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”。

4

1 回答 1

1

几件事。

  1. 使用ng-change而不是 onchange。
  2. 在指令中执行此操作。您不想访问控制器中的元素。您可以在指令中双向绑定 fileLoaded,以便您可以在控制器中访问它,如果您真的愿意,或者您可以将所有功能封装到一个不错的指令中。

不久前我写了一个类似的指令,你可以在这里查看:https ://github.com/jrowny/SpriteHero/blob/master/js/directives/file.js我在真正了解 Angular 之前就写了很好,所以它可能有点乱。此外,它不直接使用文件字段,只是从随机链接调用。

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

于 2013-08-07T19:39:14.840 回答