您的位置:首页 > Web前端 > AngularJS

AngularJS 双向绑定 <input type='file'>中文件名,文件内容

2017-02-23 10:01 483 查看
通过ng-model获取文件名,文件内容无效,这里用的都是双向绑定,但是双向绑定时参数传过去是undefined或者为空 
<div  ng-controller="getFileCtrl" >  
           <input type="file"  ng-model="feupload" />{{feupload}}          
</div>
(1)如何获取文件内容
在网上搜了搜,发现一种方法:onchange改变事件 
<div  ng-controller="getFileCtrl" >
            <input type="file"  ng-src={{files[0].name}} onchange='angular.element(this).scope().fileChanged(this)'/>  
            <input type="text" ng-model="filename" value="filename" >
           <textarea ng-model="fileContent" value="fileContent" ><textarea>
</div> 
 (2)如何数据绑定文件内容,显示到界面中
 
      Angular使用的是脏检测,意味着当改变数据之后,你自己要做一些事情来触发脏检测,然后再应用到这个数据对应的DOM元素上

JS代码:
$scope.fileChanged = function(ele){  
    $scope.files = ele.files;  

    var file = document.querySelector('input[type=file]').files[0];  
    var filename = $scope.files[0].name; 
   if(filename.length> 1 && filename ) {  
        var ldot = filename.lastIndexOf(".");  
        var type = filename.substring(ldot + 1);  //文件类型
        $scope.fileName=filename.slice(0,ldot);//文件名    
        //读取文件内容  
         var reader =new FileReader();

         reader.readAsTest(file,"UTF-8");
            reader.onload=function(evt){
                 $scope.fileContent=ev.target.result;
                 $scope.$apply(); //传播Model的变化。//很重要,等文件内容读出完以后,开启脏检测,这样就将文件名字,内容绑定到界面上显示
             }
     }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  input typefile file