ngf-select做了什么以及为什么表单验证需要它?

Kaa*_*rde 4 html javascript forms angularjs ng-file-upload

我是AngularJS noob.我试图实现一个表单,它需要填写所有输入字段,包括文件上传输入.

完全像第一个例子:https://angular-file-upload.appspot.com/

所以我创建了一个简单的表单来测试它:

<form name="myForm">
        <input id="userUpload" ng-model="filename" name="userUpload" required type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
        <input id="userName" ng-model="username" name="name" required type="text" />
        <button ng-disabled="myForm.$invalid" class="btn btn-primary">Ok</button>
    </form>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.确定按钮将永远保持禁用状态.我发现如果我将属性添加ngf-select=""到文件输入字段:

<input id="userUpload" ng-model="filename" name="userUpload" required ngf-select="" type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
Run Code Online (Sandbox Code Playgroud)

然后表单按预期工作.填充两个userNameuserUpload输入字段时,确定按钮变为启用状态.我试过谷歌搜索ngf-select但找不到满意的答案.它是做什么的,为什么表格必须按预期运作?

小智 12

ngf-select是一个文件上载指令,用于定义选择文件时发生的情况.

您可以添加与执行文件上传逻辑功能ngf-selectngf-select="uploadFunction($file)"这将确保一旦通过电脑从用户选择的,你不必点击上传按钮,将文件自动上传.

ngf-select 基本上定义了从计算机中选择文件时会发生什么.


Jos*_*cha 3

角度输入文件有问题,请参阅下一个小提琴,它会对您有所帮助。

jsFiddle

在主控制器中放置此内容,将当前范围赋予原型范围:

MyCtrl.prototype.$scope = $scope;
Run Code Online (Sandbox Code Playgroud)

在包含这个原型函数之后

MyCtrl.prototype.setFile = function(element) {
var $scope = this.$scope;
$scope.$apply(function() {
    $scope.filename = element.files[0];
});
};
Run Code Online (Sandbox Code Playgroud)

现在在输入文件上您可以调用

onchange="MyCtrl.prototype.setFile(this)"
Run Code Online (Sandbox Code Playgroud)

并且它将在更新表单验证后更新范围:)