Angular.js $log decorator
An example of $log decorator, using text to speech HTML5 API.
See http://www.jonathan-petitcolas.com/talks/2016-05-26-how-to-become-angularjs-guru.html for full presentation.
HTML
<div ng-app="myApp">
<div ng-controller="MainCtrl">
<button ng-click="triggerError();">Trigger Error</button>
</div>
</div>
JavaScript
const app = angular.module('myApp', []);
const say = msg => {
if (!window.speechSynthesis) return;
const preparedMessage = new SpeechSynthesisUtterance(msg);
window.speechSynthesis.speak(preparedMessage);
};
app.config(['$provide', $provide => {
$provide.decorator('$log', ['$delegate', $delegate => ({
error: message => {
say(message);
$delegate.error(message);
}
})]);
}]);
app.controller('MainCtrl', ($log, $scope) => {
$scope.triggerError = () => {
try {
doSomething();
} catch(e) {
$log.error(e);
}
}
});