在更改网址上重新加载视图

时间:2015-01-09 14:47:24

标签: javascript angularjs angular-ui-router

我使用angularjsui-router(使用帮助器stateHelperProvider)将视图和控制器收集到页面中。

但是我的观点没有更新问题。

我的代码(相关的代码)

config.js

app.config(function($httpProvider, $urlRouterProvider, RestangularProvider, stateHelperProvider) {

    $urlRouterProvider.otherwise("/");

    stateHelperProvider
        .state({
            name: 'division',
            url: '/division/:division',
            views: {
                'main': {
                    templateUrl: '/templates/division.main?uri=' + segment(2),
                    controller: 'DivisionController'
                }
            },
            children: [
                {
                    name: 'appcontent',
                    url: '/content',
                    views: {
                        'content': {
                            templateUrl: "templates/division.appcontent?uri=" + segment(2) + '&root=' + segment(4),
                            controller: 'AppContentController'
                        }
                    },
                    children: [
                        {
                            name: 'root',
                            url: '/:root',
                            views: {
                                'roots': {
                                    templateUrl: "templates/division.appcontent.roots?uri=" + segment(2) + '&root=' + segment(4)
                                }
                            }
                        }
                    ]
                }
            ]
        });
});

我用于链接的代码

// linking to another division
<a ui-sref="division.appcontent({division: 'test2')">test2</a>

// linking to another root
<a ui-sref="division.appcontent.root({division: 'test2', root: 'test')">test2</a>

解释

但是我的观点没有更新问题。

我的观点是具有实际数据的观点,因此我需要它们在更改时重新加载。

例如,当网址中的:divisiontest1时,模板template/division.main就会有一组数据。但是当网址中的:divisiontest2时,模板template/division.main会有另一组数据。

因此,每当网址中的:division发生变化时,我都需要重新加载模板template/division.main以及所有子模板。

但是,当:root更改网址时,我只需要重新加载模板template/division.appcontent.roots而不是template/division.main模板。

这是否可行,或者我应该更改为仅使用API​​来获取数据。

我真的希望这是有道理的。

注意

segment是我从角度路径获取一些数据的功能。

1 个答案:

答案 0 :(得分:0)

感谢来自comment@ChrisT我设法使用templateUrl作为函数。

我的新config.js:

app.config(function($httpProvider, $urlRouterProvider, RestangularProvider, stateHelperProvider) {

    $urlRouterProvider.otherwise("/");

    stateHelperProvider
        .state({
            name: 'division',
            url: '/division/:division',
            views: {
                'main': {
                    templateUrl: function(params) {
                            return '/templates/division.main?uri=' + params.division;
                    },
                    controller: 'DivisionController'
                }
            },
            children: [
                {
                    name: 'appcontent',
                    url: '/content',
                    views: {
                        'content': {
                            templateUrl: function(params) {
                                return 'templates/division.appcontent?uri=' + params.division + '&root=';
                            },
                            controller: 'AppContentController'
                        }
                    },
                    children: [
                        {
                            name: 'root',
                            url: '/:root',
                            views: {
                                'roots': {
                                    templateUrl: function(params) {
                                        return 'templates/division.appcontent.roots?uri=" + params.division + '&root=' + params.root;
                                    }
                                }
                            }
                        }
                    ]
                }
            ]
        });
});