背景:在Angular前端上工作。检索从后端进行base64编码的文档。 atob给我一个错误,但一切正常。

怀疑:我认为我的atob过滤器被调用了两次。在变量未定义/为空时击中promise,然后在promise中填充变量。

过滤器代码:

angular.module('docFilters', []).filter('base64Decode', function() {
    return function(cipherText) {
        return atob(cipherText);
    };
});


控制器代码:

angular.module('doc')
    .controller('DocCtrl', ['$scope', 'DocService', function ($scope, DocService) {
        $scope.doc = DocService.getCurrentDoc();
    }]);


getCurrentDoc()是REST请求。它向内部Web服务发出GET请求。

HTML:

<span ng-bind-html="doc.content | base64Decode"></span>


这可以正常工作-无需检查您永远不会知道的控制台。控制台显示:

“错误:无法在'Window'上执行'atob':要解码的字符串未正确编码。”

这对我来说是新的,所以我不确定是否有更好的方法。

最佳答案

atob(undefined); //throws an error

您需要修改过滤器

angular.module('docFilters', []).filter('base64Decode', function() {
    return function(text) {
        return text && atob(text);
    };
});

关于javascript - AngularJS Promise和顶部过滤器。无法在“窗口”上执行“atob”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29101856/

10-11 11:50