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

1.HTML

<input type="file" file-model="myFile">/*AngularJS定义的file-Model属性用于对文件进行操作*/

<img alt="配图预览" ng-src="{{imageSrc}}">/*这里用来放置上传的图片进行预览,ng-src是AngularJS定义替代<img>标签的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
};
});

最新文章

  1. Linux字符设备驱动框架
  2. mysql主备(centos6.4)
  3. asp.net程序集冲突解决笔记(未能加载文件或程序集&quot;XXXXXXXXX&quot;)
  4. 调Windows 7的图片浏览器查看图片
  5. 动手学习TCP:4种定时器
  6. RTSP交互命令简介及过程参数描述
  7. 网站购物,使用pickle
  8. css技术和实例
  9. C++builder XE10 终于支持类内变量初始化了
  10. php的redis 操作类,适用于单台或多台、多组redis服务器操作
  11. Mysql技术内幕-笔记-第二章 数据类型
  12. 【 D3.js 入门系列 — 2.1 】 选择、插入、删除元素
  13. Linux+Apache2.4+PHP5.6+MySQL5.6源码安装步骤
  14. 手把手安装Laravel框架(permissions扩展包)实现RBAC权限---以及一些安装时的ERROR
  15. [c/c++] programming之路(30)、位运算(一)
  16. 带你一文了解Python中的运算符
  17. Python数据类型的可变与不可变
  18. GitHub安装教程
  19. #微码分享#C++变参字符串格式化函数format_string
  20. 【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛

热门文章

  1. 基于jeesite+android开发 电子商务系统免费教程
  2. Swift 里集合类型协议的关系
  3. POJ 1287
  4. free函数使用时的注意事项。
  5. 玩转mongodb(一):初识mongodb
  6. mysql中难以理解的sql
  7. 使用vue2+Axios+Router 之后的总结以及遇到的一些坑
  8. 生产环境部署node记录(二):pm2和nginx
  9. dll(动态链接库)的编写
  10. 资料汇总--java开发程序员必备技能