0
我使用C#Helpers构建我的视图,angular2通过调用控制器并接收C#生成的视图的html来使用此视图。 但我的问题是,当用户没有权限访问视图和控制器返回401 Unautorized,这会产生一个错误,当角尝试模板加载和组件保持中断,直到您清除缓存并重新加载有效的授权。如何检查templateUrl在angular2中是否有效?
任何想法,我怎样才能验证templateUrl之前组件加载?
我使用C#Helpers构建我的视图,angular2通过调用控制器并接收C#生成的视图的html来使用此视图。 但我的问题是,当用户没有权限访问视图和控制器返回401 Unautorized,这会产生一个错误,当角尝试模板加载和组件保持中断,直到您清除缓存并重新加载有效的授权。如何检查templateUrl在angular2中是否有效?
任何想法,我怎样才能验证templateUrl之前组件加载?
我解决了我的问题,创建一个函数调用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 {}
也许你可以使用保护,以确保您的用户有权访问路线的权利。例如,当用户试图访问加载某个组件的路由时,您将调用服务器来检查用户是否可以访问该模板。 如果他有权利,路线将被激活,如果没有,他将被重定向到别处。这样,不应该有任何损坏的情况 –
@AlexBeugnet不能这样做,因为守卫事件是在加载角度templateUrl之后执行的。 – Carlinhos
这看起来很奇怪......模板只有在路线被激活时才应该加载。如果警卫没有解决,你甚至不应该到达路线...... –