发表于: 2017-04-20 01:24:00

4 1198


今天完成的事情:任务9图片上传功能完成,任务九初步完成
明天计划的事情:任务十,“增、删、改、查”四个功能还差增和改这两个
遇到的问题:

1.css样式污染,由于引入bootstrap的原因,虽然每个页面分开懒加载了各自的样式文件,但是还是存在样式需要刷新才能正确显示的情况。

2.

上传图片思路:

1.

angular.module('myApp', [])
.directive('fileModel', ['$parse', function ($parse) {
//自定义指令,定义一个属性fileModle
       return {
restrict: 'A',
           link: function (scope, element) {
element.bind('change', function (event) {
//为一个元素绑定一个事件
                   scope.file = (event.srcElement || event.target).files[0];
                   scope.getFile();
               });
           }
};

input标签中的属性file-model即就是Angular中的指令,在上面代码的link方法中,我们为指令file-model所在的元素绑定了change事件,change方法中获取到要上传的文件对象,并调用了controller中的getFile()方法(返回与指定路径中某文件相应的 File 对象。)

.controller('Upload', function ($scope, fileReader, $http, uploadFileService, loginService) {
$scope.getFile = function () {
fileReader.readAsDataUrl($scope.file, $scope)
//获取API异步读取的文件数据,另存为数据URL
       // 将该URL绑定到img标签的src属性上,就可以实现图片的上传预览效果
           .then(function (result) {
$scope.imgSrc = result;
           });
   };

    控制器中定义了一个Upload,该控制器在其作用域中定义了getFile()方法,getFile方法中调用了 fileReader service中的readAsDataUrl方法,此方法中生成了图片的地址url,并将结果返回getFile中,将返回的url赋值给$scope.imageSrc ,根据Angular双向数据绑定的机制,img元素中ng-src属性值为url,那么就可以在页面上预览图片了。

.factory('fileReader', ["$q", "$log", function ($q, $log) {
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
};
}])

fileReader service主要是完成生成获取到的文件的url地址,返回到view进行预览。


收获:

1.directive(指令)和Controller(控制器)、Service(服务)的应用范围:

当我们需要在不同的域中共享数据的时候要使用service

 controller应该纯粹地用来把service、依赖关系、以及其它对象串联到一起,然后通过scope把它们关联到view上。如果在你的 视图里面需要处理复杂的业务逻辑,那么把它们放到controller里面也是一个非常不错的选择。

directive用来操作和修改DOM

2.

restrict属性,并设置只值为 "A",来设置指令只能通过属性的方式来调用:

3.

event.srcElement 

设置或获取触发事件的对象。 

引用对象,这个对象有什么属性,就可以使用。 

常用的有: 

event.srcElement.TagName     //事件对象的html标记 

event.srcElement.innerText   //事件对象的内文本 

event.srcElement.value     //表单事件对象的值





返回列表 返回列表
评论

    分享到