AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.

寻∝梦
풀어 주다: 2018-09-07 14:22:21
원래의
1625명이 탐색했습니다.

이 기사는 주로 angularjs의 파일 업로드 기능에 대해 설명합니다. 이해하지 못하는 사람이라면 누구나 읽어볼 수 있기를 바랍니다. 이 글 함께 보시죠

문제 설명첨부파일 업로드

테스트 결과는 첨부파일로 업로드됩니다.

AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.

여기서 api를 무시하세요. api

实现的任务就是,点击选择文件,选择之后可以清楚掉该文件。

插件介绍

用到了项目映入过的一个插件,angular-file-upload。

插件很简单,就是一个指令,我们在它提供给我们的指令中声明一个uploader对象,这个对象表示在不同的时间下要执行什么操作,另一种观察者模式。

功能实现

使用指令

官网给出了该指令的很多种用法,这里选择最简单的,Single,单文件上传。

AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.

<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方法中执行!!!

关于指令中的compilecontrollerlink的执行详解,请参考正确地使用 Angular Directive 中的 compile,controller 与 link。

原因分析

可能是nv-file-select指令在实现时在link函数中进行各种事件的绑定,绑定时就需要我们的uploader对象。

而如果我们将其放在了link函数里,该指令的link函数是晚于nv-file-selectlink函数执行的,所以无效。

upload

// 上传文件
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;
로그인 후 복사

但是这里会有一个问题,这里仅仅是删除了服务器上的附件,而文件的选中效果还是在的,这里还是显示选中的文件名的。

AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.

解决方案就是用一个form把它套起来,将button的类型设置为reset,点击按钮时,就会清空input中的内容了。

로그인 후 복사
로그인 후 복사
    
                 

            <input>         

        

                     

    
로그인 후 복사
로그인 후 복사
    <input>     

设置为reset之后就会出现新的问题,因为是在一个form表单里套的这个指令,所以reset,将其他的也都清空了。

ng-form

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,一个submitbutton,提交谁?

优化

这里仅仅是最简单的一种应用场景,如果需要上传几十M

작업은 파일을 클릭하여 선택하는 것이며, 선택한 후 파일을 지울 수 있습니다.

플러그인 소개

프로젝트에 반영된 플러그인인 angle-file-upload를 사용합니다. AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.플러그인은 매우 간단합니다. 플러그인이 제공하는 명령어에서 업로더 개체를 선언합니다. 이 개체는 다른 관찰자에게 어떤 작업이 수행되는지 나타냅니다. 모드.

함수 구현

명령 사용

🎜공식 웹사이트에서는 이 명령을 사용하는 다양한 방법을 제공합니다. 여기서는 단일 파일을 업로드하는 가장 간단한 방법인 Single을 선택합니다. 🎜🎜🎜AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.🎜 🎜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 함수가 실행되었으므로 유효하지 않습니다. 🎜

업로드

rrreee

삭제

🎜사용자가 잘못된 파일을 업로드한 경우 어떻게 해야 하나요? 파일 업로드 후 표시되는 지우기 버튼을 추가합니다. 🎜rrreee🎜그런데 여기서 문제가 있습니다. 서버에 있는 첨부파일만 삭제하는데 파일 선택 효과는 그대로 있고, 선택한 파일 이름이 여기에 계속 표시됩니다. 🎜🎜🎜AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.🎜 🎜🎜해결책은 으로 래핑하고 버튼 유형을 재설정으로 설정하는 것입니다. 삭제입력의 내용이 사라졌습니다. 🎜rrreeerrreee🎜 reset으로 설정하면 새로운 문제가 발생합니다. 이 명령은 form 형식으로 설정되기 때문에 reset, 나머지는 모두 지웠습니다. . 🎜

ng-form

🎜ng-form을 사용하면 문제가 해결되었습니다. 🎜🎜이것은 ng-form 지시문에 대한 공식적인 설명입니다. 🎜🎜HTML은 양식 요소의 중첩을 허용하지 않습니다. 예를 들어 하위 항목의 유효성이 검증된 경우 양식을 중첩하는 것이 유용합니다. -컨트롤 그룹을 결정해야 합니다.🎜🎜HTMLform 요소의 중첩을 허용하지 않으며, ng-form이 사용됩니다. form 중첩을 위해 하위 form 그룹을 검증해야 하는 경우. (자세한 내용을 보려면 PHP 중국어 웹사이트 angularjs 학습 매뉴얼🎜을 방문하여 학습하세요)🎜🎜 하지만 ng-formform의 기능을 구현하지 않으므로 ng-submit을 사용할 수 없습니다. 이 디자인은 합리적입니다. ng-form 제출일 수도 있는 경우 중첩된 form, 제출버튼 code>, 누가 제출해야 하나요? 🎜🎜Optimization🎜🎜이것은 가장 간단한 애플리케이션 시나리오일 뿐입니다. 수십 개의 <code>M으로 구성된 대용량 파일을 업로드해야 한다면 어떻게 될까요? 🎜🎜🎜🎜🎜🎜🎜컴퓨터 네트워크를 공부한 친구라면 이 구현을 보면 익숙하지 않나요? 이것은 다른 네트워크가 한 번에 그렇게 많은 데이터를 전달할 수 없다는 것을 발견했을 때 라우터가 수행하는 작업이 아닙니까? 컴퓨터 네트워크의 원리는 여전히 어느 정도 유용합니다. 🎜

저번에 yunzhiTrueOrFalse 필터를 디자인했을 때와 마찬가지로 데이터 구조의 본질을 이해했습니다. 데이터 구조는 실제로 데이터 "구조"입니다. yunzhiTrueOrFalse过滤器时,我明白了数据结构的本质。数据结构其实就是数据“结构”。

我们说Map是一种数据结构,但是没有HashMap我们能不能完成任务呢?

也能,两个数组,一个存key,一个存valuefor循环呗。然后Java社区发现这种的应用场景太多,用起来太麻烦,就在JDK中实现了这样的一种数据结构HashMap

Map은 데이터 구조라고 하는데, HashMap 없이도 작업을 완료할 수 있나요?

또한 두 개의 배열이 있는데, 하나는 key를 저장하고, 하나는 value를 저장하고, for는 루프를 저장합니다. 그러다가 Java 커뮤니티에서는 이런 종류의 응용 프로그램 시나리오가 너무 많고 사용하기가 너무 번거롭다는 사실을 발견하고 JDK에서 이러한 데이터 구조 <code>HashMap을 구현했습니다. >. (이것은 내가 만든 이야기입니다!)

추상화 후에는 모든 것이 더 편리해집니다. 어느 날 기존 데이터 구조가 장면의 요구를 충족할 수 없다는 것을 알게 되면 책을 열고 직접 디자인해 보세요.

이 기사는 여기서 끝납니다. 더 많은 내용을 보려면 PHP 중국어 웹사이트

angularjs 참조 매뉴얼
을 방문하세요.

🎜🎜🎜

위 내용은 AngularJS 파일 업로드 기능에 대해 얼마나 알고 계시나요? 몇 분 안에 Anglejs 파일 업로드에 대해 알려주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿