【发布时间】:2014-11-24 05:44:24
【问题描述】:
我正在尝试关注此[tutorial],但无法正常工作。
我的 Angular 控制器正在为在我的指令中创建的模型记录 undefined。
这是一个[JSFiddle] 它的工作创建了我的教程作者。
问题是视图可以找到$scope.myFile,但控制器没有($scope.myFile 是undefined)。
视图显示{{ myFile.name }}(例如my-image.jpg)。 myFile 变量是一个包含所选文件数据的 JS 对象。这工作正常。该指令似乎正在为模型分配所选文件的值(从而在视图中正确显示它)。
<input file-model="myFile" type="file"/ >
<div class="label label-info">
{{ myFile.name }}
</div>
<button ng-click="uploadDocs()">Click</button>
这是我从[tutorial] 得到的指令。
由于输入类型file 不能使用ng-model,该指令将模型设置为与file 输入相关联,并在每次文件触发change 事件时分配给它。
directive('fileModel', [
'$parse',
function ($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;
element.bind('change', function(){
scope.$apply(function(){
if (element[0].files.length > 1) {
modelSetter(scope, element[0].files);
}
else {
modelSetter(scope, element[0].files[0]);
}
});
});
}
};
}
]).
在控制器中我只记录$scope.myFile。这是从上面 HTML 中的按钮调用的。
理想情况下,我会在这里将文件上传到服务器,但我不能,因为 $scope.myFile 未定义。
$scope.uploadDocs = function() {
var file = $scope.myFile;
console.log($scope.myFile);
};
谁能告诉我为什么视图会收到$scope.myFile,但控制器会记录undefined 为$scope.myFile?
【问题讨论】:
-
尝试将我的文件初始化为控制器的第一行:
$scope.myFile = {};这主要是点问题 -
我已经对您提供的代码进行了 plunkr,它工作正常:plnkr.co/edit/o9D2Q6Tzkesm5MTyqXFE?p=preview
-
今天遇到了这个问题。将'myFile'传递给
uploadDocs()这样的uploadDocs(myfile)函数,似乎做到了 -
@akinwale 的解决方案对我有用
-
我对同一个 jsfiddle 有完全相同的问题,由于某种原因,它在我的代码中不起作用,但在小提琴中可以正常工作。 @Akinwale 的解决方案对我有用,但是在挣扎了三个小时之后,我非常想知道为什么它不起作用!这种解决方法很好,但理解问题对我来说很重要。
标签: javascript angularjs angularjs-directive angularjs-scope