小编典典

ng-model for ``(带有指令 DEMO)

all

我尝试在带有类型文件的输入标签上使用 ng-model:

<input type="file" ng-model="vm.uploadme" />

但是在选择一个文件后,在控制器中,$scope.vm.uploadme 仍然是未定义的。

如何在我的控制器中获取选定的文件?


阅读 112

收藏
2022-04-26

共1个答案

小编典典

我用指令创建了一个解决方法:

.directive("fileread", [function () {
    return {
        scope: {
            fileread: "="
        },
        link: function (scope, element, attributes) {
            element.bind("change", function (changeEvent) {
                var reader = new FileReader();
                reader.onload = function (loadEvent) {
                    scope.$apply(function () {
                        scope.fileread = loadEvent.target.result;
                    });
                }
                reader.readAsDataURL(changeEvent.target.files[0]);
            });
        }
    }
}]);

输入标签变为:

<input type="file" fileread="vm.uploadme" />

或者,如果只需要文件定义:

.directive("fileread", [function () {
    return {
        scope: {
            fileread: "="
        },
        link: function (scope, element, attributes) {
            element.bind("change", function (changeEvent) {
                scope.$apply(function () {
                    scope.fileread = changeEvent.target.files[0];
                    // or all selected files:
                    // scope.fileread = changeEvent.target.files;
                });
            });
        }
    }
}]);
2022-04-26