1

angularプロジェクトにng-file-uploadを使用しています。htmlコードは次のとおりです。

<div class="form-group">
    <button class="btn btn-warning" ngf-select="imagesSelected($files)" multiple="multiple" ngf-pattern="'image/*'" accept="image/jpeg,image/png">选择图片</button>
</div>

そして、これは私のJavaScriptコードです:

$scope.imagesSelected = function (files) {
    if (files.length > 0) {
        angular.forEach(files, function (imageFile, index) {
            $scope.upload = Upload.upload({
                url: '/upload_image',
                method: 'POST',
                file: imageFile,
                data: {
                    'fileName': imageFile.name
                }
            }).success(function (response, status, headers, config) {
                ...
            });
        });
    }
};

ボタンをクリックして画像ファイルを選択すると、選択した直後に画像ファイルがアップロードされます。これは私が期待したことです。しかし、2 回目にアップロード ボタンをクリックすると、コンソールに if (files.length > 0) 行を指す次のエラーが表示されます。

Uncaught TypeError: Cannot read property 'length' of null

ファイル選択ウィンドウが表示されず、アップロードボタンを3回クリックすると再び正常に動作し、4回目は正常に動作しません... ng-file-uploadのバージョンは9.0.4です。 lib が修正されていないか、何か間違いを犯したのでしょうか? ありがとう。

4

1 に答える 1

1

コードの書き方が間違っています。

$scope.imagesSelected = function (files) {
    $scope.files = files;
    if (files && files.length) {
        Upload.upload({
            url: '/upload_image',
            method: 'POST',
            data: {
                files: files
            }
        }).then(function (response) {
            $timeout(function () {
                $scope.result = response.data;
            });
        }, function (response) {
            if (response.status > 0) {
                $scope.errorMsg = response.status + ': ' + response.data;
            }
        }, function (evt) {
            $scope.progress = 
                Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
        });
    }
};

ドキュメントを見る

于 2015-10-04T16:46:26.470 に答える