Angularjs $ stateProvider和singleton服务问题

时间:2016-08-24 01:50:48

标签: angularjs angular-ui-router angular-services

我正在使用angular-ui-router通过路由组织我的应用程序,但我有点困惑。据我所知,我必须在模块中添加'ui-router'dependencie以使用$ stateProvider。但即使我没有添加'ui-router'依赖,它运作良好。

我知道角度服务是单例对象所以如果我只添加一次“ui-router”依赖。我可以在任何模块中使用$ stateProvider服务吗?

下面的代码是我的应用程序中定义的角度代码。

angular.module('app', ['ui-router','app.pages']);

angular.module('app.pages', ['app.pages.core']);


angular.module('app.pages.core',[])
    .config(function ($stateProvider, $urlRouterProvider) {

    $stateProvider
        .state('common.default', {
            abstract: true,
            views: {
                header: {
                    templateUrl: '/public/app/common/components/header/header.html',
                    controller: 'headerController'

                },
                content: {
                    template: '<div ui-view></div>'
                }
            }
        })
        .state('common.default.core', {
            url: "/goongles/",
            templateUrl: "/public/app/pages/core.html",
            controller: 'coreController'
        });
});

查看代码

<div ui-view="header"></div>
<div ui-view="content" class ='view ng-scope openm'></div>
请给我任何想法。感谢

2 个答案:

答案 0 :(得分:1)

把它想象成一棵树。树的根是您在ng-app指令中设置的任何模块。当Angular引导时,它从那里开始,并加载所有模块组件及其依赖项的组件。一旦引导程序完成,生命周期就会继续(创建常量,然后是提供程序,然后运行配置块等)。

由于您的应用中某处依赖ui-router,所以它的所有服务在引导后都可用。

无论如何,你不应该依赖它来使你​​的模块工作。如果您在另一个没有依赖app.pages.core的应用程序中使用ui-router模块,那么它将不起作用。

答案 1 :(得分:1)

创建角度模块时,始终在此模块中指定使用的依赖关系,即使您已对其他模块指定了相同的依赖

请记住,每个模块应该是自给自足的,并且应该在不与其他模块依赖关系相关的情况下工作,以便完全可重用。

所以要正确回答你的问题..是的,你可以在任何模块中使用$stateProvider,但在每个模块中添加ui-router依赖。