angular.js: ReferenceError: up не определен

0

Я работаю над функцией загрузки для своего проекта, моя кнопка включает в себя функции загрузки и отправки. Как только я нажимаю на загрузку, я получаю сообщение об ошибке в консоли разработчика:

angular.js: 13236 ReferenceError: до не определено

ссылка на эту ошибку говорит о том, что проблема в этой строке

$scope.$watch("up.file", function() { if (up.file) up.submit() });

точно в if (up.file) но пока все работает нормально. Функция загрузки работает, и все файлы загружаются. Поэтому я ценю, может ли кто-нибудь объяснить мне, где моя ошибка?

  app.controller('uploadCtrl',['$scope', '$http','Upload','$window',function($scope, $http,Upload,$window){
    var vm = this;
    vm.submit = function(){ //function to call on form submit
        if (vm.upload_form.file.$valid && vm.file) {//check if from is valid

            //console.log(vm.file.name);
            vm.upload(vm.file); //call upload function
            //vm.file.name = prompt("put you name");
        }
        $scope.$watch("up.file", function() { if (up.file) up.submit() });
    };

    vm.upload = function (file) {
        Upload.upload({
            url: '/upload', //webAPI exposed to upload the file
            data:{file:file} //pass file as data, should be user ng-model
        }).then(function (resp) { //upload function returns a promise
            if(resp.data.error_code === 0){ //validate success
                $window.alert('Success ' + resp.config.data.file.name + ' uploaded.');
            } else {
                $window.alert('an error occured');
            }
        }, function (resp) { //catch error
            console.log('Error status: ' + resp.status);
            $window.alert('Error status: ' + resp.status);
        }, function (evt) {
            console.log(evt);
            var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
            console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
            vm.progress = 'progress: ' + progressPercentage + '% '; // capture upload progress
            setTimeout(10000);
        }).then (function() {
            $http.get('/compare').success(function() {
                setTimeout(function() { alert("success!"); }, 5000);
                // url was called successfully, do something
                // maybe indicate in the UI that the batch file is
                // executed...
            });
        });
    };
}]);
  • 0
    Не должно быть vm.file ?
  • 0
    up.file нигде не объявлен, я думаю, что кредит сказал, что вы имеете в виду, если (vm.file) ...
Показать ещё 1 комментарий
Теги:
file-upload

1 ответ

1
Лучший ответ

переменная up не определена в вашем контроллере. Вместо этого определяется vm.

Итак, используйте vm.file и vm.submit.

Edit: Вы определяете ваши watch выражение в submit метод, и вы вызываете submit метод из watch выражения.

Вы должны определить watch вне метода submit, например:

    vm.submit = function(){ //function to call on form submit
        if (vm.upload_form.file.$valid && vm.file) {//check if from is valid

            //console.log(vm.file.name);
            vm.upload(vm.file); //call upload function
            //vm.file.name = prompt("put you name");
        }
    };

    $scope.$watch("vm.file", function() { if (vm.file) vm.submit() });
  • 0
    Теперь я получаю angular.js: 13236 Ошибка: [$ rootScope: infdig] 10 $ digest () достигнуты итерации. Aborting! Наблюдатели сработали за последние 5 итераций: [[{"msg": "up.file", "newVal": {}}], [{"msg": "up.file", "newVal": "... "}], [{" сообщение ":" up.file " "newVal":" ... "}], [{" сообщение ":" up.file " "newVal":" ... "} ], [{ "сообщение": "up.file", "newVal": "..."}]]
  • 0
    @Anton Смотрите обновленный ответ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню