Фон: Работа на угловых передних концах. Получение документа, который base64 кодируется из бэкэнд. atob дает мне ошибку, но все работает.AngularJS Promise & atop Filter. Не удалось выполнить 'atob' на 'Window'
Suspicion: Я думаю, что мой фильтр atob вызывается дважды. Попытка обещать, пока переменная не определена/null, а затем после того, как обещание заполнит эту переменную.
Фильтр Код:
angular.module('docFilters', []).filter('base64Decode', function() {
return function(cipherText) {
return atob(cipherText);
};
});
Controller Код:
angular.module('doc')
.controller('DocCtrl', ['$scope', 'DocService', function ($scope, DocService) {
$scope.doc = DocService.getCurrentDoc();
}]);
getCurrentDoc() является запрос REST. Он делает запрос GET для внутренней веб-службы.
Html:
<span ng-bind-html="doc.content | base64Decode"></span>
Это работает 'отлично' - без проверки консоли вы никогда не знаете. На консоли показаны:
Ошибка: не удалось выполнить «atob» в «окне»: строка, подлежащая расшифровке, неправильно закодирована ».
Это ново для меня, поэтому я не уверен, есть ли лучший способ.
Я пошел с этим. Возможно, потому что я новичок, но это просто элегантно выглядело, и это тот код, который вернул меня к программированию через системы. Это похоже на тройной оператор? Возьмите текст, пока переменная не заполнится обещанием, а затем расшифрует зашифрованный текст? – HayekSplosives
@HayekSplosives 'A && B' по существу означает« если A тогда B else A ». – JLRishe
@HayekSplosives Работает из-за «лени» оператора '&&'. Рассмотрим 'A && B', если' A' является ложным, вам не нужно оценивать 'B', в противном случае вам нужно проверить, является ли' B' правдой. Вы можете переписать его, используя тернарный оператор 'return A? B: A'. –