发表于: 2016-10-19 15:40:23

0 1556


如何上传图片

Jq中的trigger

myElement.trigger("event"); 
这个命令相当于执行的时候触发了myElement元素的事件event, 
他和直接使用click,mousemove之类的命令的区别在于1.可以带参数传进去。2.这个命令是绑定在一个元素上,触发另一个元素的event事件,和click,mousemove之类的命令还是有本质的区别的。

如何自定义指令directive

首先我们先来列出的directive中的几个属性: 
restrict:

  • E: 表示该directive仅能以element方式使用,即<my-dialog></my-dialog>
  • A: 表示该directive仅能以attribute方式使用,即<div my-dialog></div>
  • C:表示该directive仅能以class方式使用,即<div class="my-dialog"></div>
  • EA: 表示该directive既能以element方式使用 ,也能以attribute方式使用。

transclude:当directive可能接受页面上的其他html内容时才会用到。有些高阶暂时不管它。

scope:当你写上该属性时,就表示这个directive不会从它的controller里继承scopeangular scope。

templateUrl:你的directive里的html内容(注意使用引号和折行符)。

link:

  • 可以简单理解为,当directive被angular 编译后,执行该方法。
  • 类似于在directive里需要调用dom元素中把方法写在link里面(不知道这样理解是否正确)。
  • link中有几个参数,scope, element, attrs。分别表示:1.scope表示directive里的scope;2.element表示directive创建的元素;3.attrs表示这个创建的元素的其他属性。(如:type,title这些的属性)

FormData()

FormData其实是一个HTML5的对象,用来当需要传输文档或者图片时,新建一个空的对象,然后把要上传的文件插入空对象中 
同时,注意,formdata是一个不透明的对象,现在暂时只有一个append可以操作,不能通过序列化手段得到其里面的内容,所以console.log是无法输出可见的数值的。

  1. var oMyForm = new FormData();  //新建一个空的FormDate对象
  2. oMyForm.append("username", "Groucho");//插入两个字符串
  3. oMyForm.append("accountnum", 123456); // 数字123456被立即转换成字符串"123456"
  4. // fileInputElement中已经包含了用户所选择的文件  <input type="file" />用来选择文件
  5. oMyForm.append("userfile", fileInputElement.files[0]);  
  6. var oFileBody = "<a id="a"><b id="b">hey!</b></a>"; // Blob对象包含的文件内容
  7. var oBlob = new Blob([oFileBody], { type: "text/xml"});   //blob是oFileBody 的一个实例
  8. oMyForm.append("webmasterfile", oBlob);  //把oblob插入进去
  9. //现在formdate中
  10. var oReq = new XMLHttpRequest();
  11. oReq.open("POST", "http://foo.com/submitform.php");
  12. oReq.send(oMyForm);

如何自定义上传指令

好,说了这么多,到底应该如何用指令写一个照片传输

  1. angular.module('skillApp')
  2. .directive('simpleUpload', function(uploadFileService) {
  3.    return {
  4.        restrict: 'AE',   //元素和属性
  5.        scope: true,     //单独定义scope,相当于于angular中的$scope,只是在这个命令里有用
  6.        template:    //html代码部分
  7.        '<div class="uploader-box">'+
  8.        '<div class="uploader-box-img" ng-if="img" ng-style="{\'background-image\':\'url(\' + img + \')\'}"></div>'+
  9.        '</div>'+
  10.        '<input class="hidden" type="file" id="fileInput" onchange="angular.element(this).scope().uploadFile(this.files);">',
  11.        link: function(scope, element, attrs) {    //其实是用来操作自定义指令中生成的元素
  12.            scope.triggerSelect = function() {
  13.                element.children('input[type=file]').trigger('click');    //这句话点击后触发input的点击事件
  14.            };
  15.            scope.uploadFile = function(files) {
  16.                var fd = new FormData();    //新建一个空的FormData对象
  17.                fd.append("file", files[0]);    //把文件插入这个空的对象中
  18.                $http.post('/a/u/img/thumb', formData, {   //把文件上传到后台
  19.                    withCredentials: true,
  20.                    headers: {'Content-Type': undefined },
  21.                    transformRequest: angular.identity
  22.                })        
  23.           }
  24.        }
  25.    }
  26. }

1.把展示的html代码写在template里面,注意要要用引号的地方用引号,该用转义字符的时候要用转义字符 
2.在link里对把图片插入formdata里,然后上传。


PS:(虽然写出来了,但是其实大多也是复制粘贴,把我自己在看的过程中的不会的地方按照自己的理解说了一下。有问题还请多指教= =)

来源: http://www.cnblogs.com/lhb25/p/html5-formdata-tutorials.html 
来源: https://segmentfault.com/q/1010000002400734



返回列表 返回列表
评论

    分享到