AngularJS图片上传功能实践
逻辑理清楚了: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
};
});
AngularJS图片上传功能实践的更多相关文章
- AngularJS图片上传功能的实现
一.前言 前一段时间做项目时,遇到一个问题就是AngularJS实现图片预览和上传的功能,当时查阅文档(都是英文文档)折腾了很久才弄出来,现将整个流程整理出来,有需要的朋友可以参考一下,如果您有更好的 ...
- megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题
最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...
- Ueditor图片上传功能的配置
之前的项目中碰到过图片上传功能的配置问题,但是没有记录下来,今天有个朋友突然又问到了我这个问题,当时没想起来之前怎么解决的,后来看了Ueditor的官方文档才回想起来. 官网文档巨多,一般大家遇到问题 ...
- angularjs图片上传和预览 base64
angularjs图片上传和预览 思路是从file中读取base64 Module.controller('controlName', ['$scope', '$http', function($sc ...
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...
- drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二
drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一 中介绍了ckeditor的安装和配置方法,其实还有另一种新方法,不用IMCE模块. 不过需要ckfinder的JS库,可以 ...
- FLASH图片上传功能—从百度编辑器UEditor里面提取出来
为了记录工作中碰到的各种问题,以及学习资料整理,今天开始,将以往的文章进行了一个整理,以后也开始认真的记录学习过程中的各种问题 在HTML里面的文件上传功能一直是个问题,为了实现上传文件大小限制,怎样 ...
- Dede后台广告管理模块增加图片上传功能插件
用户问题:网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么织梦帮就教大家一个方法实现广告图片后台直接上传,非常方便.先给大家看下修改后 ...
- 图片上传功能<转>http://blog.csdn.net/u011159417/article/details/50126023
以前也实现过上传,只不过每次都是,写完之后没有总结,下次遇到时,还要重新写,重新调式,很是浪费时间,所以,今天实现一个上传图片的功能,包括简单的页面和servlet,下次再要写这个功能时,直接拿过来就 ...
随机推荐
- cAdvisor+InfluxDB+Grafana 监控Docker
容器的监控方案其实有很多,有docker自身的docker stats命令.有Scout.有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxD ...
- Vue2.5开发去哪儿网App 城市列表开发之 兄弟组件间联动及列表性能优化
一, 兄弟组件间联动 1. 点击城市字母,左侧对应显示 给遍历的 字母 添加一个点击事件: Alphabet.vue @click="handleLetterClick" ha ...
- odoo第三方市场 -- 模块推荐
odoo 除了开源,另一个非常给力的地方就是,强大的第三方应用市场: 你入坑后,会发现非常的好玩,全球还有这么多小伙伴并肩前行,共同成长. 第三方市场有很多不错的模块,当然,好东西,不是完全免费的! ...
- sql server 2012 打开提示无效的许可证数据。需要重新安装
重装什么的没有用,需要下载Visual Studio 2010 Isolated Shell (zh-CN) ,重新安装后就好了 下载地址 Visual Studio 2010 Isola ...
- 线程中消费者生产者的实例代码(synchronized关键字)
http://www.cnblogs.com/DreamDrive/p/6204665.html 这个是用Lock类实现的. 场景: 厨师类: import java.util.List; impo ...
- 微信小程序网络封装-简单高效
废话引言 小程序虽然出世很久了,但一直没怎么接触到小程序开发.吉他兴趣班老师想弄一个小程序发布课程信息和打卡功能,作为IT一员就自愿加入了这个小程序开发小组中.虽然小程序面向的是前端工程师,但作为移动 ...
- Git 的4个阶段的撤销更改
虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握.以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完 ...
- Java中的构造器与垃圾回收
构造器 在我们初始化对象时,如果希望设置一些默认值,那么就可以使用构造器,在Java中,构造器使用和类同名的名字且没有返回值,如下 class Test{ private String name; T ...
- 24-hadoop-hiveserver2&jdbc-正则数据导入
hive 可以 类似jdbc链接, 但启动的必须是hiveserver2, 才可以使用 hiveserver2 默认监听 10000 端口 1, 启动: nohup $HIVE_HOME/bin/hi ...
- CentOS7 下编译安装 Samba,什么是 SMB/CIFS 协议
目录 一.关于 Samba 1. SMB 2. Samba 二.yum 安装 Samba 1. 安装 Samba 2. 查看版本 3. 查看配置文件 4. 启动服务 5. 本地客户端验证 6. Win ...