之前由于项目需要,决定使用angularjs做前端开发,在前两个项目中都有文件上传的功能,因为是刚接触angularjs,所以对一些模块和模块间的依赖不是很了解。都是由其他大神搭好框架,我只做些简单的填充。
现在拿出些时间来研究一下。主要针对一些插件的用法,现总结一下(以file upload 为例):
angular file upload.js 的第一行是
var angularFileUpload = angular.module('angularFileUpload', []);
这里他定义了一个angular模块,名称是angularFileUpload,不依赖其他模块;
接下来
angularFileUpload.service('$upload', ['$http', '$timeout', function($http, $timeout) {...})
在这个模块上创建了一个服务,名称是$upload,依赖'$http', '$timeout'两个内置模块(方法函数);
在这个模块的内部使用directive,创建了一些指令方法:
angularFileUpload.directive('ngFileSelect',[])//选择
angularFileUpload.directive('ngFileDrop',[]);//拖放
等方法,具体还没有研究过;
分析完这个插件,接下来就是使用该插件了;
首先引入angularjs库文件和相应插件
<script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> <script src="http://apps.bdimg.com/libs/angular-file-upload/1.3.1/angular-file-upload.min.js"></script>
下面demo
<body ng-app="appName"> <div ng-controller="ctrlName"> <div class="container"> <input type="file" ng-file-select="onFileSelect($files)" multiple accept="image/*"> </div> </div>
关键是js的控制
//注入angularjs 模块和服务 var app = angular.module('appName', ['angularFileUpload']);//创建并添加依赖(upload模块名称) app.controller('ctrlName',[ '$scope', '$upload', function($scope, $upload) {//$upload是依赖的upload模块的服务名称module.service("$upload",[]);
//这里可以调用依赖的(upload)模块里提供的方法
$scope.onFileSelect = function($files) { //$files:是已选文件的名称、大小和类型的数组 for (var i = 0; i < $files.length; i++) { var file = $files[i]; console.log(file); /*文件上传函数*/ $scope.upload = $upload.upload({ url: 'server/upload/url', //上传的url //method: 'POST' or 'PUT', //headers: {'header-key': 'header-value'}, //withCredentials: true, data: {myObj: $scope.myModelObj}, file: file, // or list of files ($files) for html5 only //fileName: 'doc.jpg' or ['1.jpg', '2.jpg', ...] // to modify the name of the file(s) // customize file formData name ('Content-Disposition'), server side file variable name. //fileFormDataName: myFile, //or a list of names for multiple files (html5). Default is 'file' // customize how data is added to formData. See #40#issuecomment-28612000 for sample code //formDataAppender: function(formData, key, val){} }).progress(function(evt) {//上传进度 console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total)); }).success(function(data, status, headers, config) { // 文件上传成功处理函数 console.log(data); }).error(function(data, status, headers, config) { //失败处理函数 console.log('上传失败'); }); }; }; }]);
其他angularjs 插件的使用方法,应该和这个差不多,自己是个小菜,正在研究,欢迎大神指正;
写的不是很清楚,后续在总结;