如何自定义角度烤箱消息

时间:2015-07-07 11:49:26

标签: javascript angularjs if-statement toastr

我正在使用angular-file-upload。我已经设置了一个批处理文件上传,它解析文件名并将它们与存储在数据库中的属性相匹配。文件需要像这样构建。

  

01-1998 VRF RD678.pdf

VRF是管道的名称 RD是位置的名称 678是位置代码的编号

它们每个都有自己的if语句来检查与数据库中的任何内容匹配的文件。现在,如果某些内容不匹配或者名称不正确,则会出现这种情况 errorPic

我想做三件事。

  1. 定义一条错误消息,显示文件名和错误输出的特定if语句。如果管道没有匹配,我想要文件名和下面的“管道不匹配”。

  2. 定义文件名结构不正确的错误消息。我想在

  3. 下面找到“文件名不正确”的文件名
  4. 防止函数出错,我希望显示错误消息并允许其他文件上传

  5. 我正在尝试使用linq.js,javascript也可以。

    这是我想要做的工作,这个例子是文件结构不正确的时候。此错误消息是

      

    TypeError:无法读取未定义的属性“name”

    $scope.upload = function () {
        var files = $scope.files;
        if (files && files.length) {
            for (var i = 0; i < files.length; i++) {
                var file = files[i];
                $scope.pipes.map(function (pip) {
                    $scope.pipeLookup[pip['PipeAb']] = pip;
                });
                $scope.locations.map(function (loc) {
                    $scope.locationLookup[loc['LocationAb']] = loc;
                });
                $scope.locationCodes.map(function (locCode) {
                    $scope.locationCodeLookup[locCode['LocationCodeAb']] = locCode;
                });
                var matchesPip = file.name.match(/^\d+\D\d+\s*(\S*\s*)(\S*)/i);
                var matchesLoc = file.name.match(/^\d+\D\d+\s*?(\S*)\s*(\S*?)(\d+)\./i);
                var matchesLocCode = file.name.match(/^(\d+\D\d+)\s*?(\S*)\s*(\S*?)(\d+)\./i);
                $scope.pip = $scope.pipeLookup[matchesPip[1]];
                $scope.loc = $scope.locationLookup[matchesLoc[2]];
                $scope.locCode = $scope.locationCodeLookup[matchesLocCode[4]];
                if ($scope.pip == null) {
    
                    $scope.pip = Enumerable.From(files)
                                .Where("x => x.files.name != '" + matchesPip[0] + "'").ToArray();
    
                    toaster.pop('error', matchesPip[0]);
                    console.log(matchesPip[0])
                }
                if ($scope.loc == null) {
                    toaster.pop('error', matchesLoc[0]);
                    console.log(matchesLoc[0])
                }
                if ($scope.locCode == null) {
                    toaster.pop('error', matchesLocCode[0]);
                    console.log(matchesLocCode[0])
                }
                $upload.upload({
                    url: '/api/apiBatchPipeLine',
                    fields: {
                        'typeId': 1,
                        'companyId': $scope.companyId.CompanyId,
                        'companyName': $scope.companyId.CompanyName,
                        'documentDate': $scope.model.documentDate,
                        'pipeId': $scope.pip['PipeId'],
                        'pipeName': $scope.pip['PipeName'],
                        'locationId': $scope.loc['LocationId'],
                        'locationAb': $scope.loc['LocationAb'],
                        'locationCodeId': $scope.locCode['LocationCodeId'],
                        'locationCodeAb': $scope.locCode['LocationCodeAb']
                    },
                    file: file
                }).progress(function (evt) {
                    var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                    console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
                }).success(function (data, status, headers, config) {
                    toaster.pop('success', config.file.name);
                    console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
                }).error(function (err, result, config) {
                    toaster.pop('error', config.file.name);
                    console.log(err, result);
                });
    
            }
        }
    };
    

    pic2 pic1

1 个答案:

答案 0 :(得分:4)

ngFileUpload error事件回调接收4个参数,如:

https://github.com/danialfarid/ng-file-upload/blob/master/dist/ng-file-upload-all.js#L509-514

promise.error = function (fn) {
   promise.then(null, function (response) {
       fn(response.data, response.status, response.headers, config);
   });
   return promise;
};

headers是第三个参数,config是第四个参数。在您的代码config中引用了headersheaders.file未定义,因此您就会收到错误TypeError: Cannot read property 'name' of undefined

变化:

.error(function (err, result, config) {
   ...
})

要:

.error(function (err, result, headers, config) {
   ...
})