AngularJS Promise&过滤器。无法执行' atob' on' Window'

时间:2015-03-17 14:33:15

标签: javascript angularjs angularjs-scope promise angular-promise

背景:处理Angular前端。从后端检索base64编码的文档。 atob给了我一个错误,但一切正常。

怀疑:我认为我的atob过滤器被调用了两次。在变量未定义/ null之后达到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':要解码的字符串未正确编码。”

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

2 个答案:

答案 0 :(得分:1)

atob(undefined); //throws an error

您需要修改过滤器

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

答案 1 :(得分:1)

为什么不让过滤器检查是否有值?

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