博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AngularJS图片上传功能实践
阅读量:6221 次
发布时间:2019-06-21

本文共 2052 字,大约阅读时间需要 6 分钟。

逻辑理清楚了:service提供FileReader函数,directive提供点击事件的绑定和监听,controller用来修改html上的ng-src属性值

1.HTML

/*AngularJS定义的file-Model属性用于对文件进行操作*/    配图预览/*这里用来放置上传的图片进行预览,ng-src是AngularJS定义替代标签的src属性,其值将在后台逻辑获得*/

2.AngularJS

1)Controller

.controller('AddarticleCtrl', function ($scope,fileReader) {/*Controller是实际操作html元素的部分*/    $scope.getFile= function () {      fileReader.readAsDataUrl($scope.myFile,$scope)/*注意这里$scope.myFile,要看实际情况,调试发现这里用该调用入参数的myFile属性*/        .then(function (result) {          $scope.imageSrc=result;        });      };  });

2)Directive

.directive('fileModel', function ($parse) {/*$parse是AngularJS的内置directive*/    return {      restrict: 'A',/*限制该directive的声明方式 为Attribute*/      link: function (scope, element, attrs) {        var model=$parse(attrs.fileModel);        var modelSetter=model.assign;        element.bind('change',function (event) {/*页面加载时执行*/          scope.$apply(function () {/*当用户点击html上的input标签,选中需要上传的图片 然后点击确定后执行*/            modelSetter(scope,element[0].files[0]);          });          scope.getFile();        });      }    };  });

3)Service

.service('fileReader', function ($q) {    // AngularJS will instantiate a singleton by calling "new" on this function    var onLoad=function (reader,deferred,scope) {      return function () {        scope.$apply(function () {          deferred.resolve(reader.result);        });      };    };    var onError=function (reader,deferred,scope) {      return function () {        scope.$apply(function () {          deferred.reject(reader.result);        });      };    };    var getReader=function (deferred,scope) {      var reader=new FileReader();      reader.onload=onLoad(reader,deferred,scope);      reader.onerror=onError(reader,deferred,scope);      return reader;    }    var readAsDataURL=function (file,scope) {/*上传图片的主函数*/      var deferred=$q.defer();      var reader=getReader(deferred,scope);      reader.readAsDataURL(file);      return deferred.promise;    };    return{      readAsDataUrl:readAsDataURL    };  });

 

转载于:https://www.cnblogs.com/carriej/p/6821903.html

你可能感兴趣的文章
大数据概述
查看>>
★Kali信息收集~2.Whois :域名信息
查看>>
码医自学法V2.2(附名老中医)
查看>>
LightOJ - 1349 Aladdin and the Optimal Invitation(中位数)
查看>>
数据库中的T-sql语句 条件修改 高级查询
查看>>
HTML 表单常用的代码元素
查看>>
二分法查找
查看>>
lc415. Add Strings
查看>>
【快学SpringBoot】过滤XSS脚本攻击(包括json格式)
查看>>
C# this.Invoke和this.BeginInvoke 最简单的写法
查看>>
第十一周项目3-点类派生直线类
查看>>
微信H5页面 会被软键盘顶起来
查看>>
ajax post提交到SpringMVC的Controller并将处理结果传递到前台输出总结(6)-- springmvc 控制器获取参数的几种方式...
查看>>
通用类 ControlHelper 获取、绑定、校验控件值的操作方法类
查看>>
今天的移动支付,还是很不安全[转]
查看>>
1174:大整数乘法
查看>>
为什么wait()方法要放在同步块
查看>>
vue中v-for索引不要用key
查看>>
触发器基本使用
查看>>
UIWebView与js那些事
查看>>