ユーザーが<input type="file"
コントロールで選択したファイルの内容を読み上げようとしています。角度は、ファイルアップロードコントロールのディレクティブを持っていないにもかかわらず、$apply
を呼び出してこれを修正するのは簡単でなければなりません:HTML5ファイルをAngularJSでアップロードする
function MyController($scope) {
$('#myFile').on('change', function() {
var that = this;
$scope.$apply(function() { $scope.files = that.files });
});
}
残念ながら、イベントは発生しません。セレクタが正しいDOM要素を参照することができないようです:セレクタが要素を見つけたとしても、ファイルのリストは常に空です。これは、jsコンソールで突っ込んだ場合にも発生します。 DOMインスペクタでは、そのプロパティの中にファイルリストがあります。
これは私を夢中にさせていますが、私がそれまでに動作させる唯一の方法は、グローバル変数に割り当てるインラインイベントハンドラを使用することです。 jqueryセレクターが別の項目を返すのはなぜですか?セレクタを混乱させるような角度のあるテンプレートのコンパイルがありますか?ここで
nice。コントローラーでグローバル関数を定義し、それをインラインイベントハンドラーから呼び出すことになりました。 $ scopeは外側のクロージャに入っているので、少なくとも変更を適用できます。この指示文は、それを行うための「角度のある」方法です。しかし、質問は立っています:なぜセレクタは、ユーザが相互作用しているような "input"要素を返しますが、実際にはそうではありませんか? – BruceBerry
mmmhこれは私のためには機能しません。あなたのplunkrを実行すると、私はいつも ファイルを取得します: { "0":{} } 私は間違っていますか? – pomarc
@pomarc IIRC、それは動作するために使用されました...しかし、現代のブラウザはFileオブジェクトの文字列化をサポートしていないようです。プロパティに直接アクセスしてビューに表示する必要があります。 – Tosh