AngularJs-ng repeat中的文件选择器

AngularJs-ng repeat中的文件选择器,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,我很高兴使用solution@Snowman's answer中的文件选择器 然而,现在我想在ng repeat循环中使用它,我被卡住了 我冒昧地复制了该问题的解决方案: angular .module('app.services') .directive('fileChange', function() { return { restrict: 'A', scope: { handler: '&' }, link:

我很高兴使用solution@Snowman's answer中的文件选择器

然而,现在我想在
ng repeat
循环中使用它,我被卡住了

我冒昧地复制了该问题的解决方案:

angular
  .module('app.services')
  .directive('fileChange', function() {
    return {
     restrict: 'A',
     scope: {
       handler: '&'
     },
     link: function (scope, element) {
      element.on('change', function (event) {
        scope.$apply(function(){
          scope.handler({files: event.target.files});
        });
      });
     }
    };
});

<input type="file" file-change handler="fileSelect(files)">

$scope.fileSelect = function(files) {
  var file = files[0];
  var reader = new FileReader();
  reader.onload = function(e) {
    console.log("on load", e.target.result);
  }
  reader.readAsText(file);
}
在HTML中,在
ng repeat
中,我将使用(仅限伪代码)

添加了一个
image
参数,并将其添加到控制器中的
$scope.fileSelect(image,files)
。请注意,指令无需更改


就像一个符咒一样有效

我就在这里试过,但有一些不同之处,而且很有效。我唯一更改的是添加到测试中的控制器

检查我是如何做到的:(单击RunCodeSnippet查看它的实际操作)

angular
.module('app.services',[])
.controller('TestController',函数($scope){
$scope.inputs=[1,2,3,4];
$scope.fileSelect=函数(文件){
var file=files[0];
var reader=new FileReader();
reader.onload=函数(e){
日志(“加载”,例如target.result);
}
reader.readAsText(文件);
}
})
.directive('fileChange',function(){
返回{
限制:“A”,
范围:{
处理程序:'&'
},
链接:功能(范围、元素){
元素。on('change',函数(事件){
作用域$apply(函数(){
处理程序({files:event.target.files});
});
});
}
};
});

角度测试

我很少看到一个新人(欢迎加入)给出这样的上帝和详细的回答,所以我会奖励100分奖金。谢谢它当然工作得很好,所以我会考虑如何使它适应我的代码。啊!我刚刚意识到我没有把问题讲清楚。请参阅更新。如果容易,请告诉我;否则,我将发布一个新的、更清晰的问题。很抱歉,如果系统允许,我会在两天内给你奖金。多亏你的帮助,我终于拿到了奖金。我更新了问题以给出答案。期待你的赏金在2天时间:-)酷!我很高兴能帮助你,@Mawg!谢谢你的欢迎!我一直热衷于阅读Stack Overflow,但我从未注册过。我认为在这里帮助一些人会很酷,因为Stack Overflow在过去的几年里帮了我很多。如果你打算提供这样的巨大帮助,那么你将是社区的巨大资产:-)
$scope.image = {'fileName' : '',
                'description' : ''};

$scope.images = [];   // array of $scope.image
<ng-repeat image in images>
   <input type="text" ng-model="image.description"/>
   <input type="file" file-change handler="fileSelect(files)">
<ng-repeat image in images>
   <input type="text" ng-model="image.description"/>
   <input type="file" file-change handler="fileSelect(image , files)">