在工作中,使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,之前查了一些资料,结合实践,得出一种比较实用的方法,相对简化版,在这里记录一下,如有不同看法,欢迎一起沟通,一起成长。

demo.html:
<!doctype html>
<html ng-app="myTestCtrl">
<head>
<meta charset="UTF-8">
<title>demo</title>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="myCtrl.js"></script>
<style type="text/css">
.inputBox{width: 160px; height: 28px; padding: 0 0 0 8px; box-sizing: border-box; background-color:#fff; margin-left: 5px; border: 1px solid #c4c4c4; color: #333; border-radius: 3px; -o-border-radius: 3px;-moz-border-radius: 3px;-webkit-border-radius: 3px;}
.inputBox:focus{border: 1px solid #207fe9;}
.btn-primary {color: #fff; background-color: #428bca; border-color: #357ebd;}
.btn {display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 14px; font-weight: 400;line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; -ms-touch-action: manipulation; touch-action: manipulation; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-image: none; border: 1px solid transparent; border-radius: 4px;}
.bg-bbbbbb{background-color: #bbb;}
.fl{float:left;}
.ml5{margin-left: 5px;}
.ml10{margin-left: 10px;}
.ml30{margin-left: 30px;}
.mt10{margin-top: 10px;}
.mt20{margin-top: 20px;}
.f-cb:after:after{display:block;clear:both;visibility:hidden;height:0;overflow:hidden;content:".";}
.f-cb{zoom:1;}
.f-cb .topSearch{ float: left; margin-top: 10px; line-height: 30px; font-size: 12px; }
</style>
</head>
<body id="myTestCtrl" ng-controller="myTestCtrl">
<div class="wrapper">
<div class="content">
<div class="f-cb" style="height: 40px;">
<div class="topSearch"><span class="w70 tr dib fl">主视觉图:</span><input type="text" class="inputBox fl ml5" ng-model="fileName"><button class="btn btn-primary ml10" ng-class="{'bg-bbbbbb':imgDisabled}" style="width:60px; margin-top:-3px; height:18px; position: relative;" img-upload></button></div>
</div>
<div class="f-cb mt10"><img ng-src="{{thumb.imgSrc}}" style="width:200px; height: 200px;" ng-show="thumb.imgSrc"/></div>
</div>
<div class="mt20 ml30">
<button class="btn btn-primary" ng-click="saveClick()" ng-class="{'bg-bbbbbb':submitDisabled}">提交</button>
</div>
</div>
</body>
</html>
<span style="font-size:14px;">myCtrl.js:</span>
<pre name="code" class="javascript">//关键 js 部分
var myTestCtrl = angular.module('myTestCtrl', []);
//定义“上传”指令,修改后也可用于上传其他类型的文件
myTestCtrl.directive("imgUpload",function(){
return{
//通过设置项来定义
restrict: 'AE',
scope: false,
template: '<div class="fl"><input type="button" id="storeBtn" style="padding:0; position: absolute; top: 0; left: 0; background: none; border: none;color: #fff; width:84px; height: 30px; line-height: 30px;" value="选择文件"><input type="file" name="testReport" id="file" ng-disabled="imgDisabled" style="position: absolute; top: 0; left: 0; opacity: 0;height: 30px;" accept=".jpg,.png"></div>', //name:testReport 与接口字段相对应。
replace: true,
link: function(scope, ele, attrs) {
ele.bind('click', function() {
$('#file').val('');
});
ele.bind('change', function() {
scope.file = ele[0].children[1].files;
if(scope.file[0].size > 52428800){
alert("图片大小不大于50M");
scope.file = null;
return false;
}
scope.fileName = scope.file[0].name;
var postfix = scope.fileName.substring(scope.fileName.lastIndexOf(".")+1).toLowerCase();
if(postfix !="jpg" && postfix !="png"){
alert("图片仅支持png、jpg类型的文件");
scope.fileName = "";
scope.file = null;
scope.$apply();
return false;
}
scope.$apply();
scope.reader = new FileReader(); //创建一个FileReader接口
console.log(scope.reader);
if (scope.file) {
//获取图片(预览图片)
scope.reader.readAsDataURL(scope.file[0]); //FileReader的方法,把图片转成base64
scope.reader.onload = function(ev) {
scope.$apply(function(){
scope.thumb = {
imgSrc : ev.target.result //接收base64,scope.thumb.imgSrc为图片。
};
});
};
}else{
alert('上传图片不能为空!');
}
});
}
};
});
myTestCtrl.controller("myTestCtrl", function($scope, $http) {
//导入图片
$scope.saveClick = function () {
//禁用按钮
$scope.imgDisabled = true;
$scope.submitDisabled = true;
var url = '';//接口路径
var fd = new FormData();
fd.append('testReport', $scope.file[0]);//参数 testReport=后台定义上传字段名称 ; $scope.file[0] 内容
$http.post(url, fd, {
transformRequest: angular.identity,
headers: {
'Content-Type': undefined
}
}).success(function (data) {
if(data.code != 100) {
alert(JSON.stringify('文件导入失败:'+files.files[0].name+',请重新上传正确的文件或格式'));
}else{
alert(JSON.stringify('文件导入成功:'+files.files[0].name));
}
//恢复按钮
$scope.imgDisabled = false;
$scope.submitDisabled = false;
}).error(function (data) {
alert('服务器错误,文件导入失败!');
//恢复按钮
$scope.imgDisabled = false;
$scope.submitDisabled = false;
});
};
});
</pre>
<br>
<pre></pre>
<p></p>
<pre>
</pre>
<p></p>
<pre>
</pre>
关于angularjs的知识大家可以参考下小编给大家整理的专题,angularjs学习笔记,一起看看吧!
以上所述是小编给大家介绍的AngularJs上传前预览图片的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# angularjs
# 上传预览图片
# AngularJS实现图片上传和预览功能的方法分析
# Angularjs实现上传图片预览功能
# angularjs点击图片放大实现上传图片预览
# angularjs实现多张图片上传并预览功能
# 学习使用AngularJS文件上传控件
# angularjs客户端实现压缩图片文件并上传实例
# AngularJS 文件上传控件 ng-file-upload详解
# 通过AngularJS实现图片上传及缩略图展示示例
# SpringMvc+Angularjs 实现多文件批量上传
# Angularjs实现多图片上传预览功能
# 上传
# 小编
# 给大家
# 上传图片
# 在这里
# 在此
# 如有
# 也可
# 在一旁
# 看看吧
# 经常会
# 所述
# 创建一个
# 在工作中
# 给我留言
# 转成
# 相对应
# 感谢大家
# 为空
# 学习笔记
相关文章:
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
javascript中的try catch异常捕获机制用法分析
宝塔建站助手安装配置与建站模板使用全流程解析
手机网站制作与建设方案,手机网站如何建设?
如何生成腾讯云建站专用兑换码?
c# 服务器GC和工作站GC的区别和设置
用v-html解决Vue.js渲染中html标签不被解析的问题
如何正确下载安装西数主机建站助手?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何通过PHP快速构建高效问答网站功能?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何通过VPS搭建网站快速盈利?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何在万网ECS上快速搭建专属网站?
制作证书网站有哪些,全国城建培训中心证书查询官网?
如何高效生成建站之星成品网站源码?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站之星导航菜单设置与功能模块配置全攻略
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站之星如何一键生成手机站?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
如何快速搭建高效简练网站?
建站之星导航如何优化提升用户体验?
大连网站设计制作招聘信息,大连投诉网站有哪些?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
常州自助建站工具推荐:低成本搭建与模板选择技巧
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
如何快速搭建自助建站会员专属系统?
如何实现建站之星域名转发设置?
如何在腾讯云服务器快速搭建个人网站?
如何做网站制作流程,*游戏网站怎么搭建?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
盐城做公司网站,江苏电子版退休证办理流程?
javascript基本数据类型及类型检测常用方法小结
打鱼网站制作软件,波克捕鱼官方号怎么注册?
如何彻底删除建站之星生成的Banner?
linux top下的 minerd 木马清除方法
宁波免费建站如何选择可靠模板与平台?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
建站之星安装路径如何正确选择及配置?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何通过VPS建站实现广告与增值服务盈利?
如何零成本快速生成个人自助网站?
C#如何在一个XML文件中查找并替换文本内容
视频网站app制作软件,有什么好的视频聊天网站或者软件?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
网站微信制作软件,如何制作微信链接?
*请认真填写需求信息,我们会在24小时内与您取得联系。