2016-01-29 18 views
8

Supponendo che la richiesta per il modello di un componente, non possa essere consegnata (codice di stato 400, ecc.), Esiste un modo per rilevare l'errore al fine di intraprendere un'azione (reindirizzamento, ecc ...)Come rilevare un errore di caricamento templateUrl

Grazie.

+0

Buona domanda! (; – Sasxa

+0

potrebbe esserci qualche intercettatore 'http', che potrebbe aiutare a scoprire che c'è un errore durante il caricamento di qualsiasi cosa tramite il protocollo' http'. –

+0

@PankajParkar Quello che mi piacerebbe avere era una sorta di ripiego in caso di un errore, supponendo che avessi un cruscotto e uno dei componenti non poteva essere reso, potrei usare un modello "statico" che dice "Errore", invece di "rompere" l'app. Probabilmente qualcosa come $ templateRequest in angular1. .. –

risposta

0

Attualmente non sono a conoscenza di un modo per eseguire una cattura nel templateUrl.

Quello che possiamo fare, come soluzione, è effettuare una richiesta head per verificare se il file esiste.

Quindi, il componente sarebbe simile a questa:

import {Component, View} from 'angular2/angular2'; 

let hasTemplate = function(template: string) { 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', template, false); 
    http.send(); 
    return (http.status===200) ? template : 'error.html';  
} 

@Component({ 
    selector: 'your-component' 
}) 
@View({ 
    templateUrl: hasTemplate('your-template.html') 
}) 
export class YourComponent { 
    constructor() { 
    } 
} 

So che questa non è una soluzione ottimale. Ma per il momento penso che sia una soluzione facile che ti permetterà di fare un ripiego nel caso in cui il file modello non sia presente.

0

AFAIK esiste attualmente (beta.2) nessun meccanismo di questo tipo.

È possibile controllare il source code del metodo normalizeTemplate che recupera il modello, non penso che ci sia un modo per collegare un po 'di logica se si verifica un errore.

0

Utilizzando il nuovo resolver di angular2 è possibile prelampare i dati prima di caricare il modello. Suppongo che tu possa usare lo stesso meccanismo per precaricare il modello, anche se lo butti via. Nel blocco catch è possibile reindirizzare se c'è qualche problema con la richiesta.

C'è una buona informazione e un bell'esempio a https://angular.io/docs/ts/latest/guide/router.html#!#resolve-guard, che ho incluso sotto nel caso in cui qualcosa accada al collegamento.

Problemi correlati