0

角度のあるビュー/フォーム内に入力ファイル要素があります。私はこのようにng-uploadを使用しています:

<input id="img" type="file" name="image" onchange="angular.element(this).scope().setFile(this)">
<input id="imgname" type="hidden" value=""></div>

angularに要素の変更をリッスンするように指示できないためinput[type="file"]、現在のファイル名を保持するだけの非表示の入力を更新するメソッドを作成しました。そうすれば、2 番目のフィールドでバリデーターを実行できます。

私が持っている別のフィールドには、次のようなある種のバリデーターがあります。

<input ng-model="other" ng-change="chg()"/>

さて、問題は、メソッド$scope.chg()からバリデーターをトリガーするsetFile()と、同じスコープが得られないと思います-chg()実行されますが、バリデーターが別のスコープにあり、実際の送信ボタンを有効に設定していないかのようです. chg() からログを記録しようとしました - ビューで実際に表示されるものとは異なるスコープを示しています。

そして、後で通常の入力フィールド("other")を変更して ng-change をトリガーすると、変更が反映されるか、実際には送信ボタンの状態が正しく設定されます。

今、これは、直接の $scope-bound メソッドではなく、フォームからangular.element(this).scope().setFile(this)を呼び出すことに関係していると思われます。しかし、トリガーされないため、 $scope-bound メソッドを呼び出すことはできません - 私が正しく理解していれば、それは Angular が (まだ) input type=fileフィールドで動作していないためです。

ここで何ができますか?

ファイルがあるかどうかを検出したいだけなので、送信ボタンを適切に有効/無効にできます。

4

1 に答える 1

1

私は私のために働くフォローフローを使用しました:

<input type="file"
       ng-model="upFile"  
       onchange="angular.element(this).scope().setFileEventListener(this)"
 />

コントローラーから:

$scope.setFileEventListener = function(element) {
        $scope.uploadedFile = element.files[0];

        if ($scope.uploadedFile) {
            $scope.$apply(function() {
                $scope.upload_button_state = true;
            });   
        }
    }

それが役立つことを願っています。

于 2013-11-10T10:54:36.003 に答える