角打开控制器/视图基于服务器响应
我有不同类型的网页的角应用,所有识别出的由一个段塞的基本URL后右,所以像:角打开控制器/视图基于服务器响应
http://example.com/slug-a
http://example.com/slug-b
蛞蝓a和b是不同的类型,需要在不同的视图中呈现。属于由slug a和b标识的对象的数据是从服务器获取的,并且Angular应用程序应该根据对象类型更改视图。
是否可以在ngRoute的$ routeProvider中处理?我无法找到帮助我任何与此文档,我敢肯定,我不是第一个尝试这种..
因此,简而言之:
- 客户端请求蛞蝓A = >角请求从服务器数据=>角负载ControllerA与模板A.
- 客户端请求蛞蝓B =>从服务器请求角数据=>角负载与模板乙ControllerB基于服务器响应
不同视图。
我认为你不能在路由器中做到这一点。 但是,您可以通过$location
服务将用户重定向到其他位置。 像这样
// somewhere inside your controller
var promise = loadData().then(data => {
if (data.slugA) {
$location('path_to_slugA');
}
else if (data.slugB) {
$location('path_to_slugB');
}
else {
// do something else
}
});
这是行不通的。 $ location.path()不能改变,因为用户已经在正确的URL。它只需要根据服务器返回的数据加载不同的模板。 $ location.path()不能改变。 – Keugels
我看到...在这种情况下,看看这两个答案http://stackoverflow.com/questions/24496201/load-html-template-from-file-into-a-variable-in-angularjs和http: //stackoverflow.com/questions/14788417/angular-load-template-from-url-and-compile-inside-div –
好吧,我用不同的,更简单的方法解决它。 (不知道为什么之前我没有想出解决办法)
$routeProvider.when('/:slug/', {
controller: 'SlugController',
template: '<div ng-include="template"></div>'
});
然后SlugController发出请求并加载设置$ scope.template合适的模板。在模板文件中,控制器附加到根元素。
简单但有效.. :)
这是基本的路线定义。你的应用中是否配置了路由? https://docs.angularjs.org/api/ngRoute/provider/$routeProvider。 –
是的,我有多条路线。最后一条路线/:slug捕获所有其他路线。角度请求来自服务器的数据(由slug参数标识)并基于返回的数据我需要显示某个模板。 (例如,可能是用户名,国家或城市,用户,国家和城市使用不同的模板显示) – Keugels