基于服务器响应的角度打开控制器/视图

时间:2016-06-14 11:06:19

标签: angularjs angular-routing

我有一个包含不同类型页面的Angular应用程序,所有页面都在基本URL后面的slug中标识,所以像:

http://example.com/slug-a
http://example.com/slug-b

Slug a和b是不同类型的,需要在不同的视图中呈现。属于由slu a和b标识的对象的数据是从服务器获取的,Angular应用程序应该根据对象类型更改视图。

是否可以在ngRoute的$ routeProvider中处理此问题?我无法找到任何可以帮助我的文档,而且我确定我不是第一个尝试这个的文档。

简而言之:

  • 客户请求slu A A => Angular从Server =>请求数据Angular使用模板A加载ControllerA。
  • 客户请求slug B => Angular从Server =>请求数据角度加载ControllerB与模板B

基于服务器响应的不同视图。

2 个答案:

答案 0 :(得分:0)

我认为你不能在路由器中这样做。 但您可以通过$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
    }
});

答案 1 :(得分:0)

好的,我用一种不同的,更简单的方法解决了这个问题。 (不知道为什么我之前没有想到这一点)

$routeProvider.when('/:slug/', {
    controller: 'SlugController',
    template: '<div ng-include="template"></div>'
});

然后SlugController发出请求并通过设置$ scope.template加载正确的模板。在模板文件中,控制器附加到根元素。

简单但有效.. :))