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-changeonchange の代わりに使用します。
  2. これをディレクティブで行います。コントローラー内の要素にアクセスしたくありません。ディレクティブで fileLoaded を双方向バインドして、必要に応じてコントローラーでアクセスできるようにするか、すべての機能をナイス ディレクティブにカプセル化することができます。

しばらく前に似たようなディレクティブを書きました。ここで確認できます: https://github.com/jrowny/SpriteHero/blob/master/js/directives/file.jsそれは少し面倒かもしれません。また、ファイルフィールドを直接使用するのではなく、ランダム リンクから呼び出されるだけです。

かなり早い段階でディレクティブをマスターしないと、Angular は本当に混乱します。そうしないと、ラングが数段しかないはしごを手に入れたようなものです。

于 2013-08-07T19:39:14.840 に答える