【问题标题】:Enable button after upload file doesn't work first time上传文件后启用按钮第一次不起作用
【发布时间】:2016-12-31 09:10:44
【问题描述】:

我正在尝试将我的按钮的启用状态设置为在选择要上传的文件后启用

问题是在启用按钮之前我必须选择文件两次

   <form name="importForm">
    <div ng-if="vm.results == null">

        <div>
            <label>File*</label>

            <input id = "uploadFile" ng-model="vm.fileImporter.file"
                   onchange="angular.element(this).scope().file_changed(this)"
                   required
                   type="file" accept="*" />
        </div>

        <div class="footer">
            <button ng-disabled="importForm.$invalid" ng-click="vm.importFile()">Import</button>
        </div>
    </div>
</form>


    $scope.file_changed = function (element) {
        $scope.$apply(function (scope) {
            var file = element.files[0];
            var reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = function (evt) {
                vm.fileImporter.file = evt.target.result;
            }
        });
    };

【问题讨论】:

    标签: javascript html angularjs file-upload


    【解决方案1】:

    问题出在这一行:

    onchange="angular.element(this).scope().file_changed(this)"
    

    通过这样做,您正在处理输入范围,而不是您的控制器范围(因此,您不是指您的函数 $scope.file_changed )。

    尝试将您的线路更改为这样的内容(注意使用 ng-change 而不是 onchange):

    ng-change="file_changed(this)"
    

    应该可以解决你的问题。

    【讨论】:

    • 嗨 Luxor001,当我这样做时,我得到一个错误 file_changed is not defined 我需要更改 vm 中方法的签名吗?
    • 我的错,你应该使用 ng-change 而不是 onchange,我没有注意到。 ng-change 是一个角度指令(你应该使用它),onchange 是纯 javascript(这很糟糕:那么使用 angular 有什么意义呢?)请参阅我编辑的答案以了解详细信息
    • 尝试在控制器中初始化 vm.fileImporter.file。然后, ng-change 应该可以工作。如果它不会,我真的不知道该怎么做:尝试制作问题并将其发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多