javascript - que - AngularJs/.provider/¿cómo obtener el rootScope para realizar una transmisión?
metodo $on angular (3)
Mi forma de hacerlo es usar un decorador y volver al controlador de excepciones anterior en caso de errores desconocidos:
app.config(function ($provide) {
$provide.decorator(''$exceptionHandler'', function($delegate, $injector) {
return function (exception, cause) {
if (ICanHandleThisError) {
var rootScope= $injector.get(''$rootScope'');
// do something (can use rootScope)
} else
$delegate(exception, cause);
};
});
});
Ahora mi tarea es reescribir el proveedor $ exceptionHandler para que muestre el diálogo modal con el mensaje y detenga el evento predeterminado.
Lo que hago:
en el inicio del proyecto utilizo el método .provider:
.provider(''$exceptionHandler'', function(){
//and here I would like to have rootScope to make event broadcast
})
El método de inyección standart no funciona.
UPD : sandbox - http://jsfiddle.net/STEVER/PYpdM/
Necesitas inyectar el $ rootScope:
.provider(''$exceptionHandler'', ''$rootScope'', function(){
//and here I would like to have rootScope to make event broadcast
})
¿Es esto lo que intentaste? Y si es así, ¿tiene un mensaje de error o un jsfillde / plnkr para ver por qué falló?
Puedes inyectar el inyector y buscar el $ rootScope.
Demostración plunkr: http://plnkr.co/edit/0hpTkXx5WkvKN3Wn5EmY?p=preview
myApp.factory(''$exceptionHandler'',function($injector){
return function(exception, cause){
var rScope = $injector.get(''$rootScope'');
if(rScope){
rScope.$broadcast(''exception'',exception, cause);
}
};
})
Actualización: añadir técnica .provider también:
app.provider(''$exceptionHandler'', function() {
// In the provider function, you cannot inject any
// service or factory. This can only be done at the
// "$get" method.
this.$get = function($injector) {
return function(exception,cause){
var rScope = $injector.get(''$rootScope'');
rScope.$broadcast(''exception'',exception, cause);
}
};
});