Директива angularjs element.on ('change') не запускается - PullRequest
0 голосов
/ 11 июля 2019

Я использую эту директиву для загрузки файлов.У файла есть метка, которая идет долго с ним.У меня есть функция, которую я вызываю перед попыткой загрузки, и если эта функция возвращает false, то я не хочу выполнять загрузку, потому что пользователь не указал значение метки.

Проблема, кажется, заключается в том, что я просто возвращаюсь из обратного вызова element.on ('change'), который никогда больше не вызывается.Когда я возвращаю $ .ajax (), когда все работает, element.on ('change') запускается столько раз, сколько я хочу.Поэтому я не уверен, почему простой вызов return останавливает element.on ('change') для запуска в будущих попытках загрузки.

angular.module('ngSimpleUpload', [])
    .directive('ngSimpleUpload', ['$http', function ($http) {
        return {
            scope: {
                webApiUrl: '@',
                callbackFn: '=',
                errorFn: '=',
                preFn: '=',
                selectedFileFn: '=',
                additionalData: '=',
                buttonId: '@'
            },
            link: function (scope, element, attrs) {

                // original code, trigger upload on change
                element.on('change', function (evt) {
                    var files = evt.__files_ || (evt.target && evt.target.files);
                    Upload(files);
                });

                function Upload(files) {
                    // can bail out of the entire call if preupload returns false
                    if (scope.preFn(scope.additionalData) == false) {
                        return;
                    }

                    var fd = new FormData();

                    angular.forEach(files, function (v, k) {
                        fd.append('file', files[k]);
                        scope.selectedFileFn(files[k].name);
                    });

                    return $.ajax({
                        type: 'POST',
                        url: scope.$eval(scope.webApiUrl),
                        data: fd,
                        async: true,
                        cache: false,
                        contentType: false,
                        processData: false
                    }).done(function (d) {
                        // callback function in the controller
                        scope.callbackFn(d, scope.additionalData);
                    }).fail(function (x) {
                        // callback function in the controller
                        scope.errorFn(x);
                    });
                }
            }
        }
    }]);

1 Ответ

0 голосов
/ 11 июля 2019

ОК, оказывается, проблема в том, что значение элемента не было очищено, поэтому изменение не сработает.Я добавил element.val (null), когда пре провалился, и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...