第七次迭代开发总结(AngularJS下文件上传的实现)

第七次迭代开发总结

突然之间冒出来一个第七次迭代总结看上去挺奇怪的,事实上因为学校项目的关系,我暑假留校继续开发。在迭代的前半周期,团队进行了一次技术迁移,舍弃LiveScript转向了ECMAScript 6。有空的话会写一些ECMAScript 6的学习笔记。
这次开发我主要负责两个模块,一个主要从数据库中读取数据,另一个则是实现文件上传的功能。值得注意的是,因为采用的是My SQL, Express, Angular JS和NodeJS的MEAN(和普通的MongoDB MEAN不一样,不过其实我不太懂为什么不用My SQL这样的关系型数据库,因为感觉快一些啊)。团队里面的人都没有在AngularJS下实现过文件上传,其实我是挺方的。

AngularJS下文件上传的实现

在写之前我主要是在Stack Overflow上找到了File Upload using AngularJS这个问题,里面提到了两个比较好的插件angular-uploadng-file-upload,我看了他们的效果和实现的原理,其实也是使用FormData来实现的,所以我就觉得其实自己写一个也是可以的。

jade:
form(enctype='multipart/form-data')
  input(type="file" name='file')
ECMAScript 6:
let formData = new FormData($('form')[0]);

      $.ajax({
        url: `\api`,
        type: 'POST',
        data: formData,
        cache: false,
        processData: false,
        contentType: false,
        success: (data, textStatus)=> {

          alert('Upload Successfully');

        },
        error: (err) => {

          alert('Fail to upload, please upload file again');

        }
      });

其实实现的时候并不难,可是因为一直无法插入到表中所以调试了很久。后来才发现其实是API要求的数据应该放在formData而不是请求的params, body等地方的。这个坑有点大。
其实AngularJS本身的 httpajax http底层实现其实是一样的,所以不会差很多。

异步函数中对页面DOM元素的改变如何生效?

同样是文件上传页面,异步获取文件名并显示在页面和成功上传后页面的另一模块显示都诡异地不能通过$scope这样来实现,如下:

ECMAScript 6
success: (data, textStatus)=> {


          alert('Upload Successfully');

          $('.feedback').addClass('choose');

          $scope.selectedTab = 'feedback';


}

代码是上文Ajax请求成功以后的回调函数,事实上这样执行的效果就是feedback这个类选择器对应的元素会变化可是$scope.selectedTab这个值并不会改变。这个在获取文件名并显示上同样存在。请教过师兄加了一行迷之代码以后就可以了。

$scope.$apply();

这个是在赋值完成以后再次对页面DOM元素进行更新。。。。我看的书都不知道去哪里了。。

这次迭代看出了我自己的缺点同时也让我觉得如果你问的问题不是很白痴的话其实别人是很愿意教你的。不过不知道为什么总会有人觉得我有点伸手党?看来做法上还是有点问题,以后要学习一下如何查找资料。

如有问题欢迎发邮件到kcnnow(at)gmail.com一起讨论,如需转载,请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值