테스트 결과는 첨부파일로 업로드됩니다.
여기서 api
를 무시하세요. api
。
实现的任务就是,点击选择文件,选择之后可以清楚掉该文件。
用到了项目映入过的一个插件,angular-file-upload。
插件很简单,就是一个指令,我们在它提供给我们的指令中声明一个uploader
对象,这个对象表示在不同的时间下要执行什么操作,另一种观察者模式。
官网给出了该指令的很多种用法,这里选择最简单的,Single
,单文件上传。
<input>
一个file
类型的input
,使用nv-file-select
指令,传给该指令一个uploader
对象作为参数。
很简单的逻辑,新建一个FileUploader
的对象,然后重写它的onAfterAddingFile
方法,就是在文件添加完成之后,也就是点击选择文件,选中文件,点击完成之后执行的一个方法。
此方法中我们直接对文件进行上传操作。
// 新建文件上传实例 self.uploader = new FileUploader(); // 重写文件添加后的方法 self.uploader.onAfterAddingFile = function(fileItem) { // 打印日志 if (config.debug) { console.info('onAfterAddingFile', fileItem); } // 上传文件 self.upload(fileItem); }; // 传给视图 $scope.uploader = self.uploader;
如果将文件上传封装成指令,以上代码应该方法指令的controller
方法中执行!!!
关于指令中的compile
、controller
、link
的执行详解,请参考正确地使用 Angular Directive 中的 compile,controller 与 link。
可能是nv-file-select
指令在实现时在link
函数中进行各种事件的绑定,绑定时就需要我们的uploader
对象。
而如果我们将其放在了link
函数里,该指令的link
函数是晚于nv-file-select
的link
函数执行的,所以无效。
// 上传文件 self.upload = function(data) { // 上传文件 AttachmentService.uploadFile(data._file) .then(function success(response) { // 将上传成功的附件绑定再ngModel中 $scope.ngModel = response.data; // 显示上传按钮 self.showClear(); }, function error() { // 提示用户上传失败 sweetAlert.swal({ title: "对不起", text: "上传的附件不能大于1M,请确认附件是否大于1M" }); }); };
用户上传错了文件怎么办呢?添加一个清空按钮,如果上传文件之后就显示。
// 清空选中文件 self.clear = function() { self.deleteFile(scope.ngModel.id); }; // 删除附件 self.deleteFile = function(id) { AttachmentService.deleteFile(id, function success() { // 将附件赋为空对象 scope.ngModel = undefined; // 隐藏清空按钮 self.hideClear(); }); }; scope.clear = self.clear;
但是这里会有一个问题,这里仅仅是删除了服务器上的附件,而文件的选中效果还是在的,这里还是显示选中的文件名的。
解决方案就是用一个form
把它套起来,将button
的类型设置为reset
,点击按钮时,就会清空input
中的内容了。
设置为reset
之后就会出现新的问题,因为是在一个form
表单里套的这个指令,所以reset
,将其他的也都清空了。
拿ng-form
解决了问题。
这是ng-form
指令的官方解释:
HTML does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a sub-group of controls needs to be determined.
HTML
不允许嵌套form
元素,ng-form
被用来嵌套form
,如果一个子的form
组需要被验证。(想看更多就到PHP中文网angularjs学习手册中学习)
但是ng-form
并没有实现form
的功能,ng-submit
就不能使用,想想这样设计也是合理的,如果ng-form
也能submit
,嵌套form
,一个submit
的button
,提交谁?
这里仅仅是最简单的一种应用场景,如果需要上传几十M
업로더
개체를 선언합니다. 이 개체는 다른 관찰자에게 어떤 작업이 수행되는지 나타냅니다. 모드. 함수 구현
Single
을 선택합니다. 🎜🎜🎜🎜 🎜rrreee🎜파일
유형의 입력
, nv-file-select
명령을 사용하고 업로더
전달 >Object 명령을 매개변수로 사용합니다. 🎜🎜매우 간단한 논리입니다. 새 FileUploader
개체를 만든 다음 해당 onAfterAddingFile
메서드를 다시 작성합니다. 즉, 파일이 추가된 후 클릭하여 파일을 선택하고 file , Finish를 클릭한 후 실행되는 메서드입니다. 🎜🎜이 방법에서는 파일을 직접 업로드합니다. 🎜rrreee🎜파일 업로드를 명령어로 캡슐화한다면 위 코드는 메소드 명령어의 controller
메소드에서 실행되어야 합니다! ! ! 🎜🎜지시문의 compile
, controller
, link
실행에 대한 자세한 설명은 올바른 사용법을 참고하세요. Angular 지시문, 컨트롤러 및 링크에서 컴파일합니다. 🎜link
함수에서 다양한 이벤트를 바인딩하기 위해 nv-file-select
지시문을 사용하는 경우가 있을 수 있습니다. 그런 다음 업로더
개체가 필요합니다. 🎜🎜그리고 link
함수에 넣으면 이 명령어의 link
함수가 nv-file-select
보다 나중입니다. >link 함수가 실행되었으므로 유효하지 않습니다. 🎜폼
으로 래핑하고 버튼
유형을 재설정
으로 설정하는 것입니다. 삭제입력의 내용이 사라졌습니다. 🎜rrreeerrreee🎜 reset
으로 설정하면 새로운 문제가 발생합니다. 이 명령은 form
형식으로 설정되기 때문에 reset
, 나머지는 모두 지웠습니다. . 🎜ng-form
을 사용하면 문제가 해결되었습니다. 🎜🎜이것은 ng-form
지시문에 대한 공식적인 설명입니다. 🎜🎜HTML은 양식 요소의 중첩을 허용하지 않습니다. 예를 들어 하위 항목의 유효성이 검증된 경우 양식을 중첩하는 것이 유용합니다. -컨트롤 그룹을 결정해야 합니다.🎜🎜HTML
는 form
요소의 중첩을 허용하지 않으며, ng-form
이 사용됩니다. form
중첩을 위해 하위 form
그룹을 검증해야 하는 경우. (자세한 내용을 보려면 PHP 중국어 웹사이트 angularjs 학습 매뉴얼🎜을 방문하여 학습하세요)🎜🎜 하지만 ng-form
은 form
의 기능을 구현하지 않으므로 ng-submit
을 사용할 수 없습니다. 이 디자인은 합리적입니다. ng-form
이 제출
일 수도 있는 경우 중첩된 form
, 제출
의 버튼 code>, 누가 제출해야 하나요? 🎜🎜Optimization🎜🎜이것은 가장 간단한 애플리케이션 시나리오일 뿐입니다. 수십 개의 <code>M
으로 구성된 대용량 파일을 업로드해야 한다면 어떻게 될까요? 🎜🎜🎜🎜🎜🎜🎜컴퓨터 네트워크를 공부한 친구라면 이 구현을 보면 익숙하지 않나요? 이것은 다른 네트워크가 한 번에 그렇게 많은 데이터를 전달할 수 없다는 것을 발견했을 때 라우터가 수행하는 작업이 아닙니까? 컴퓨터 네트워크의 원리는 여전히 어느 정도 유용합니다. 🎜저번에 yunzhiTrueOrFalse
필터를 디자인했을 때와 마찬가지로 데이터 구조의 본질을 이해했습니다. 데이터 구조는 실제로 데이터 "구조"입니다. yunzhiTrueOrFalse
过滤器时,我明白了数据结构的本质。数据结构其实就是数据“结构”。
我们说Map
是一种数据结构,但是没有HashMap
我们能不能完成任务呢?
也能,两个数组,一个存key
,一个存value
,for
循环呗。然后Java
社区发现这种的应用场景太多,用起来太麻烦,就在JDK
中实现了这样的一种数据结构HashMap
Map
은 데이터 구조라고 하는데, HashMap
없이도 작업을 완료할 수 있나요? 또한 두 개의 배열이 있는데, 하나는 key
를 저장하고, 하나는 value
를 저장하고, for
는 루프를 저장합니다. 그러다가 Java
커뮤니티에서는 이런 종류의 응용 프로그램 시나리오가 너무 많고 사용하기가 너무 번거롭다는 사실을 발견하고 JDK에서 이러한 데이터 구조 <code>HashMap
을 구현했습니다. >. (이것은 내가 만든 이야기입니다!) 추상화 후에는 모든 것이 더 편리해집니다. 어느 날 기존 데이터 구조가 장면의 요구를 충족할 수 없다는 것을 알게 되면 책을 열고 직접 디자인해 보세요.
이 기사는 여기서 끝납니다. 더 많은 내용을 보려면 PHP 중국어 웹사이트angularjs 참조 매뉴얼
을 방문하세요.
위 내용은 AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!