angular图片上传

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

html代码:

当input出发change事件会调用touchUpdateImg方法,传入file对象和需要展示得到imgsmall属性,通过FileReader对象读取文件对象,我使用了apply使apply进行了监听,之前不使用apply时,没有实时展示图片。

<div class="imglist"><div class="imglist-title">商品相册</div><div class="imglist-content"><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall1')" ng-model="imgSmall1"><img class="handle-inp" id="imgSmall1" ng-src="{{imgSmall1}}" /><div class="mast-delete" ng-if="deleteImg[0]"><div class="delete-img" ng-click="touchDeleteImg(0,'imgSmall1')">x</div></div></div><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall2')" ng-model="imgSmall2"><img class="handle-inp" id="imgSmall2" ng-src="{{imgSmall2}}" /><div class="mast-delete" ng-if="deleteImg[1]"><div class="delete-img" ng-click="touchDeleteImg(1,'imgSmall2')">x</div></div></div><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall3')" ng-model="imgSmall3"><img class="handle-inp" id="imgSmall3" ng-src="{{imgSmall3}}" /><div class="mast-delete" ng-if="deleteImg[2]"><div class="delete-img" ng-click="touchDeleteImg(2,'imgSmall3')">x</div></div></div><div class="imglist-item"><input class="oneimg" type="file" name="oneimg" onchange="angular.element(this).scope().touchUpdateImg(this.files,'imgSmall4')" ng-model="imgSmall4"><img class="handle-inp" id="imgSmall4" ng-src="{{imgSmall4}}" /><div class="mast-delete" ng-if="deleteImg[3]"><div class="delete-img" ng-click="touchDeleteImg(3,'imgSmall4')">x</div></div></div></div></div>

js代码

model的代码,我在model了做了初始化的操作,就是没选则时默认图片

这里写图片描述

service.goodsObj['imgArr'] = {'imgBig':'image/supplier/add_big2.png','imgSmall1':'image/supplier/add_small2.png','imgSmall2':'image/supplier/add_small2.png','imgSmall3':'image/supplier/add_small2.png','imgSmall4':'image/supplier/add_small2.png'};
controller里是获取model里定义的数组,进行一开始的赋值

这里写图片描述

$scope.imgObj          = AddGoodsModel.goodsObj['imgArr'];$scope.file            = AddGoodsModel.goodsObj['file'];$scope.imgBig     		= $scope.imgObj['imgBig'];$scope.imgSmall1    	= $scope.imgObj['imgSmall1'];$scope.imgSmall2    	= $scope.imgObj['imgSmall2'];$scope.imgSmall3    	= $scope.imgObj['imgSmall3'];$scope.imgSmall4    	= $scope.imgObj['imgSmall4'];
// 上传图片function _touchUpdateImg(obj,imgobj){var file = obj[0];console.dir(file);// 判断文件的类型var name = file['name'];var postfix = name.substring(name.lastIndexOf(".")+1).toLowerCase();if(postfix !="jpg" &&  postfix !="png" && postfix != "jpeg" && postfix != "gif"){$scope.toast('上传的文件的类型只能是jpg、png、jpeg、gif');return false;}// 判断是不是大图if(imgobj == 'imgBig'){AddGoodsModel.emptyFile = false;$scope.emptyFile = false;}// 获取文件读取对象var reader = new FileReader();reader.readAsDataURL(file);reader.onload = function (e) {   $scope.$apply(function () {// 判断文件的大小if(file['size'] > 1048576){dealImage(e.target.result,angular.element('#'+imgobj)[0],function(base64){$scope[imgobj] = base64;$scope.imgObj[imgobj] = encodeURI($scope[imgobj]);$scope.file[imgobj]['size'] = file['size'];$scope.file[imgobj]['type'] = file['type'];});$scope.toast('文件太大,请稍等!');return false;}  $scope[imgobj] = e.target.result;$scope.imgObj[imgobj] = encodeURI($scope[imgobj]);$scope.file[imgobj]['size'] = file['size'];$scope.file[imgobj]['type'] = file['type'];})}            }// 使用canvas对图片进行绘制function dealImage(path, obj, callback){var img = new Image();img.src = path;img.onload = function(){var that = this;// 默认按比例压缩var w = that.width,h = that.height,scale = w / h;w = obj.width || w;h = obj.height || (w / scale);var quality = 0.8;  // 默认图片质量为0.7//生成canvasvar canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');// 创建属性节点var anw = document.createAttribute("width");anw.nodeValue = w*1.5;var anh = document.createAttribute("height");anh.nodeValue = h*1.5;canvas.setAttributeNode(anw);canvas.setAttributeNode(anh); ctx.drawImage(that, 0, 0, w*1.5, h*1.5);// 图像质量if(obj.quality && obj.quality <= 1 && obj.quality > 0){quality = obj.quality;}// quality值越小,所绘制出的图像越模糊var base64 = canvas.toDataURL('image/jpeg', quality );// 回调函数返回base64的值callback(base64);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

千万创业者的自白:踩过坑才明白这些真相!

“大众创业、万众创新”的浪潮正兴&#xff0c;随着国家对自主创业扶持力度的加强&#xff0c;中国的初创企业正在蓬勃发展&#xff0c;据统计&#xff0c;最近五年中国新注册的公司约有3000万家。 而另一方面&#xff0c;在轰轰烈烈的创业大潮中&#xff0c;市场竞争指数也急…

SpringBoot2 集成 skywalking 实现链路追踪

文章目录1. 启动skywalking2. 配置探针3. 启动项目4. 测试验证5. 效果图1. 启动skywalking cd D:\apache-skywalking-apm-bin\binwindows环境&#xff1a; 双击startup.bat linux环境&#xff1a; startup.sh2. 配置探针 -javaagent:D:\apache-skywalking-apm-bin\agen…

以“基”取胜:戴尔科技云平台 释放企业新动能

2020年春天&#xff0c;以云计算、5G、人工智能为代表的“新基建”蔚然成风&#xff0c;不仅助力中国产业智能化、信息化进入加速推进的快车道&#xff0c;促使全产业链迈开高质量发展的新步伐。更是面向长远&#xff0c;构筑数字经济创新发展之基。可以说&#xff0c;没有任何…

Nexus协议,闲鱼一体化开发的幕后玩家

Serverless是这几年兴起的一个概念&#xff0c;Serverless可以帮助开发者减轻甚至摆脱传统后端应用开发所需要的服务器设备的设置和运维工作&#xff0c;并以服务接口的方式为开发者提供所需要的功能。它希望开发者更加专注于应用逻辑本身&#xff0c;而不是被琐碎的基础设施细…

angular封装富文本编辑器指令

这个富文本编辑器的基本用法可以去该编辑器作者的github看下 (https://github.com/echosoar/medit) html代码和css 原版&#xff1a; 改版的&#xff1a; /*富文本编辑器*/#meditToolBar {position:fixed;z-index:100;width:100%;left: 0;bottom: 0;height:40px;background:…

日处理数据量超10亿:友信金服基于Flink构建实时用户画像系统的实践

导读&#xff1a;当今生活节奏日益加快&#xff0c;企业面对不断增加的海量信息&#xff0c;其信息筛选和处理效率低下的困扰与日俱增。由于用户营销不够细化&#xff0c;企业 App 中许多不合时宜或不合偏好的消息推送很大程度上影响了用户体验&#xff0c;甚至引发了用户流失。…

玛莎拉蒂“跨界”腾讯车联打造车载互联系统,新Ghibli “触电新生”

7月17日&#xff0c;玛莎拉蒂首款“触电”车型新Ghibli正式发布&#xff0c;与新亚太区代言人——锋芒玩家陈伟霆先生共同亮相&#xff0c;诠释年轻无畏的先锋态度。在创新科技方面&#xff0c;新Ghibli率先搭载了玛莎拉蒂与腾讯车联共同打造的全新车载互联系统。 【玛莎拉蒂新…

认识Java异步编程

一 、认识异步编程 通常Java开发人员喜欢使用同步代码编写程序,因为这种请求(request)/响应(response)的方式比较简单&#xff0c;并且比较符合编程人员的思维习惯;这种做法很好&#xff0c;直到系统出现性能瓶颈&#xff1b;在同步编程方式时由于每个线程同时只能发起一个请求…

云原生应用万节点分钟级分发协同实践

导读&#xff1a;2019 年天猫 双11&#xff0c;阿里巴巴核心系统首次实现 100% 上云。面对全球最大的交易洪峰&#xff0c;阿里云扛住了每秒 54.4 万笔的交易峰值&#xff0c;这是“云原生”与“天猫全球狂欢节”的一次完美联名。 &#xff08;图为 2019 年天猫 双11 成交额&am…

为啥Underlay才是容器网络的最佳落地选择

导语&#xff1a; 几年前&#xff0c;当博云启动自研容器网络研发的时候&#xff0c;除了技术选型的考虑&#xff0c;我们对于先做 Underlay 还是 Overlay 网络也有过深度的讨论。当时的开源社区以及主流容器厂商&#xff0c;多数还是以 Overlay 网络方案为主&#xff0c;但在我…

oracle用户编辑文件中文乱码

文章目录一、分析定位1. 现象2. 查看当前编码3. 配置文件现状二、解决方案2.1. 编辑配置文件2.2. 调整2.3. 刷新环境变量2.4. 效果图2.5. 配置文件源码一、分析定位 1. 现象 2. 查看当前编码 登录oracle用户&#xff0c;查看当前oracle用户下的编码 [oraclelocalhost ~]$ ec…

今年圣诞,麋鹿第一次请假

年末的圣诞节来啦~~&#xff01; 但我们的圣诞老人为什么有点低落&#xff1f;&#xff1f; 是在愁信太多&#xff1f;没地儿放&#xff1f; 不会是看不懂我信上的“鬼画符”吧.. 难道是在忌惮空中的雾霾&#xff1f;哈哈~ 圣诞老人&#xff1a;o(╥﹏╥)o 不不不&#xf…

高德网络定位算法的演进

1.导读 GPS定位精度高&#xff0c;且早已成为移动设备标配&#xff0c;但GPS也具有一些难以克服的缺陷&#xff0c;包括&#xff1a; 冷启动时间长。GPS启动时&#xff0c;需要进行搜星&#xff0c;锁定卫星信号&#xff0c;然后再进行位置技术&#xff0c;这个过程可能会达到…

疫情之下网络安全如何保障?Akamai防护方案前来“保驾护航”

2020年春天&#xff0c;以5G、人工智能、云计算为代表的“新基建”蔚然成风&#xff0c;着眼国家数字经济体系建设&#xff0c;打造数字经济体系底座的“新基建”&#xff0c;无疑成为中国经济整体应对未来发展的核心方案。然而&#xff0c;面临“新基建”与企业数字化进程的突…

2020将至,谈谈中小企业创业的那些事儿

2019正迎来尾声&#xff0c;在创业这场轰轰烈烈的旅途中&#xff0c;有的人名利双收&#xff0c;有的人饱受非议。一入创业深似海&#xff0c;在创业赛道上&#xff0c;很多公司完成了从0到1&#xff0c;却死在从1到100的路上。而小程序的出现&#xff0c;让移动互联网创业走向…

axios从安装到使用的教程

安装axios: npm install --save axios 目录结构: 红框部分是接口文件&#xff1a; appApi.js是存放接口的文件 import Vue from vue import axios from axiosexport default {// 获取分类show_category: function () {return axios.post(/point-api-show_category);},// 获…

嘘,这是手淘双11 GMV 暴涨的秘密

阿里妹导读&#xff1a;信息流作为手淘的一大流量入口&#xff0c;对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上&#xff0c;我们首次将端计算大规模应用在手淘客户端&#xff0c;通过端侧丰富的用户特征数据和触发点&#xf…

vuex从安装到使用的教程

vuex的安装 npm install vuex --save或cnpm install vuex --save main.js引入vuex import Vue from vue import Vuex from vuex import store from ./vuex/storeVue.use(Vuex) vuex的目录结构和store.js的代码 store.js的代码&#xff08;异步和同步的代码均留下两个方法&am…

未来,仅凭几个前端工程师,就能 hold 住一家企业吗?

阿里妹导读&#xff1a;微前端架构旨在解决单体应用在一个相对长的时间跨度下&#xff0c;由于参与的人员、团队的增加&#xff0c;从一个普通应用演变成一个巨石应用(Frontend Monolith)&#xff0c;随之而来的应用不可维护问题。这类问题在企业级 Web 应用中尤为常见。今天&a…

yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本

文章目录1. 现象2. 授权安全策略3. 重新执行命令1. 现象 2. 授权安全策略 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本&#xff0c;请使用以下命令将计算机上的 执行策略更改为 RemoteSigned 执行&#xff1a; set-ExecutionPolicy RemoteSigned查看执…