2017-07-03 65 views
0

我使用C#Helpers构建我的视图,angular2通过调用控制器并接收C#生成的视图的html来使用此视图。 但我的问题是,当用户没有权限访问视图和控制器返回401 Unautorized,这会产生一个错误,当角尝试模板加载和组件保持中断,直到您清除缓存并重新加载有效的授权。如何检查templateUrl在angular2中是否有效?

任何想法,我怎样才能验证templateUrl之前组件加载?

+0

也许你可以使用保护,以确保您的用户有权访问路线的权利。例如,当用户试图访问加载某个组件的路由时,您将调用服务器来检查用户是否可以访问该模板。 如果他有权利,路线将被激活,如果没有,他将被重定向到别处。这样,不应该有任何损坏的情况 –

+0

@AlexBeugnet不能这样做,因为守卫事件是在加载角度templateUrl之后执行的。 – Carlinhos

+0

这看起来很奇怪......模板只有在路线被激活时才应该加载。如果警卫没有解决,你甚至不应该到达路线...... –

回答

0

我解决了我的问题,创建一个函数调用templateUrl并返回正确的字符串url。

function hasTemplate(template: string) { 
 
    var http = new XMLHttpRequest(); 
 
    http.open('GET', template, false); 
 
    http.send(); 
 
    return (http.status === 200) ? template : '/view/home/error/'; 
 
} 
 

 
export const getViewUrl = <TModel>(modelo: { new(): TModel }, tipo: string) => { 
 
    //Url to call web service and verify the response 
 
    let url = `/view/${modelo.name.toLowerCase()}/${tipo}`; 
 
    return hasTemplate(url); 
 
}; 
 

 
@Component({ 
 
    selector: 'cidade-list', 
 
    templateUrl: getViewUrl(Cidade, 'list'), 
 
    styleUrls: [CssPath], 
 
    providers: [ 
 
     CidadeService, 
 
    ] 
 
}) 
 

 
export class CidadeListComponent {}