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

1.HTML

  1. <input type="file" file-model="myFile">/*AngularJS定义的file-Model属性用于对文件进行操作*/
  2.  
  3. <img alt="配图预览" ng-src="{{imageSrc}}">/*这里用来放置上传的图片进行预览,ng-src是AngularJS定义替代<img>标签的src属性,其值将在后台逻辑获得*/

2.AngularJS

1)Controller

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

2)Directive

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

3)Service

 
  1. .service('fileReader', function ($q) {
  2. // AngularJS will instantiate a singleton by calling "new" on this function
  3. var onLoad=function (reader,deferred,scope) {
  4. return function () {
  5. scope.$apply(function () {
  6. deferred.resolve(reader.result);
  7. });
  8. };
  9. };
  10. var onError=function (reader,deferred,scope) {
  11. return function () {
  12. scope.$apply(function () {
  13. deferred.reject(reader.result);
  14. });
  15. };
  16. };
  17.  
  18. var getReader=function (deferred,scope) {
  19. var reader=new FileReader();
  20. reader.onload=onLoad(reader,deferred,scope);
  21. reader.onerror=onError(reader,deferred,scope);
  22. return reader;
  23. }
  24.  
  25. var readAsDataURL=function (file,scope) {/*上传图片的主函数*/
  26. var deferred=$q.defer();
  27. var reader=getReader(deferred,scope);
  28. reader.readAsDataURL(file);
  29. return deferred.promise;
  30. };
  31.  
  32. return{
  33. readAsDataUrl:readAsDataURL
  34. };
  35. });

angualrJs实现图片上传功能的更多相关文章

  1. thinkphp达到UploadFile.class.php图片上传功能

    片上传在站点里是非经常常使用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php).方便于我们去实现图片上传功能,以 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...

  3. PHP语言学习之php做图片上传功能

    本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...

  4. [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站

    前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...

  5. H5 利用vue实现图片上传功能。

    H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...

  6. 给DEDECMS广告管理中增加图片上传功能

    dedecms的广告管理功能稍微有点次,本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自己的dedecms版本下载对应的编码然后解压把里面的文件放在后台目录覆盖即可 ...

  7. vue 图片上传功能

    这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下:   <ul class="clearfix">   ...

  8. 前端丨如何使用 tcb-js-sdk 实现图片上传功能

    前言 tcb-js-sdk 让开发者可以在网页端使用 JavaScript 代码服务访问云开发的服务,以轻松构建自己的公众号页面或者独立的网站等 Web 服务.本文将以实现图片上传功能为例,介绍 tc ...

  9. 改造百度UMeditor(UEditor-min)富文本编辑器的图片上传功能

    最近项目需要新增一个发布文章的模块,用的是百度的Ueditor富文本编辑器. 公司用的是阿里云的图片服务器,需要直接把文章中图片上传到服务器上,但是这个编辑器的上传图片是直接上传到Tomcat的根目录 ...

随机推荐

  1. Java并发编程实践读书笔记(3)任务执行

    类似于Web服务器这种多任务情况时,不可能只用一个线程来对外提供服务.这样效率和吞吐量都太低. 但是也不能来一个请求就创建一个线程,因为创建线程的成本很高,系统能创建的线程数量是有限的. 于是Exec ...

  2. js之作用域

    1.什么是作用域 作用域是用于收集存储维护变量,以及当前执行代码声明的变量所拥有的权限, 例如 : function foo(a){ console.log(a); --------    1    ...

  3. Numpy学习50例

    基础部分 1.导入numpy模块 import numpy as np 2.查看numpy版本信息 print(np.__version__) numpy的主要对象的多维数组Ndarray.Numpy ...

  4. HTML页面的重绘(repaint)和重流(reflow)

    重流(Reflow)是指布局引擎为frame计算图形的过程. frame是一个矩形,拥有宽高和相对父容器的偏移.frame用来显示盒模型(content model), 但一个content mode ...

  5. 【树】Unique Binary Search Trees

    题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For e ...

  6. CentOS常用命令、快照、克隆大揭秘

    不多说,直接上干货! cat是查看文件内容, cp –cp是连目录及件文件都拷贝 cp是拷贝文件 a.txt里的内容是,   abc   def   ghi cat a.txt |grep –v gh ...

  7. redis报Cannot allocate memory错误

    昨天16:27开始将dp的日志使用ELK处理,当时redis使用内存的量不是很大,100M多点,结果今天早上到了一看xshell被关掉了,赶紧将各服务启动起来,elasticsearch启动没有问题, ...

  8. mysql创建用户,并指定用户的权限(grant命令)

    参考链接http://blog.csdn.net/leili0806/article/details/8573636,谢谢这位仁兄 1.创建新用户的SQL语句: CREATE USER 'pig'@' ...

  9. php的数组变量

    数组就是存储同一类型的多个变量的 一种特殊的类型 php的数组有两种形态 1.普通类型 eg:$cars = array("Volvo","BMW"," ...

  10. Java 裁剪图片

    package com.test; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.Ima ...