javascript - 如何使用 ng-model 双向绑定(bind)到类型 ="file"输入?

标签 javascript angularjs

基本上我想这样做:

<input type="file" ng-model="variable_in_scope">

当我选择一个文件时,variable_in_scope 应该被分配给选择的文件对象。此外,如果 variable_in_scope 的值在我页面的其他任何地方发生更改,它应该更新“选择文件”按钮旁边的文本以指示所选文件已更改。

对于任何其他类型的输入,这都可以。

我不需要做任何花哨的事情,比如实际查看文件的内容。最终,我想发布它,但我发现你可以通过 setting the file object you get into a FormData object 做到这一点,实际上没有将内容读入 Javascript 领域。

我发现了其他关于使用 Angular 选择文件的问题,但没有一个有双向绑定(bind)解决方案。

最佳答案

My answer on another question 提供了一种使用ng-model 执行此操作的方法,但由于该问题不是专门关于双向绑定(bind)的(而且我的答案很难在那里找到),我'将在此处重现:

app.directive('bindFile', [function () {
    return {
        require: "ngModel",
        restrict: 'A',
        link: function ($scope, el, attrs, ngModel) {
            el.bind('change', function (event) {
                ngModel.$setViewValue(event.target.files[0]);
                $scope.$apply();
            });

            $scope.$watch(function () {
                return ngModel.$viewValue;
            }, function (value) {
                if (!value) {
                    el.val("");
                }
            });
        }
    };
}]);

Demo

要使用它,您只需将它添加到您的 Angular 模块,并在您要使用它的文件选择器上包含一个 bind-file 属性。

关于javascript - 如何使用 ng-model 双向绑定(bind)到类型 ="file"输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313115/

相关文章:

php - 使用 php 将值从一个页面传递到另一个页面

php - Laravel JWT token 在身份验证 JWT 方法中刷新后无效

visual-studio - 在 Visual Studio 中缩小和捆绑 AngularJS

javascript - 使用 angularjs 将多个独立附件上传到 couchdb

javascript - 单击时 ng-repeat 中的一个按钮会更改颜色,但并非所有按钮都使用 Angularjs

javascript - 将返回的 S3 对象放入数组中

javascript - Javascript中基于两个对象数组计算的对象数组

javascript - javascript中的多个if else条件

javascript - 将键盘快捷键关联到鼠标事件的方法

angularjs - Webpack 正在加载模块两次