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

本文共 2050 字,大约阅读时间需要 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.οnlοad=onLoad(reader,deferred,scope);      reader.οnerrοr=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/SPHmomo/p/9198329.html

你可能感兴趣的文章
【转】Math.Atan2 方法
查看>>
C++设计模式之工厂方法模式
查看>>
poj3984_bfs+回溯路径
查看>>
MyEclipse使用技巧
查看>>
[译]径向镜片反畸变滤波
查看>>
畅通工程-最小生成树+并查集
查看>>
top命令输出解释以及load average 详解及排查思路
查看>>
Ajax的封装
查看>>
Java传入参数个数不确定可用(Type ... values)
查看>>
POJ 2081
查看>>
记录下zend studio 的xdebug 在调试安装
查看>>
ES6阅读笔记
查看>>
数字基带信号分类
查看>>
移动HTML5前端性能优化指南(转)
查看>>
Jq 遍历each()方法
查看>>
Android源码分析:Telephony部分–phone进程
查看>>
关于 redis.properties配置文件及rule
查看>>
WebService
查看>>
关于Java中重载的若干问题
查看>>
Java中start和run方法的区别
查看>>