Angularjs app中的双$ rootScope

时间:2013-08-02 19:03:11

标签: angularjs angularjs-scope

这个问题让我头疼 - 我不知道为什么,但在我的应用程序中我有两个$ rootScope,$ id为“001”和“003”(每个都有分开的变量)。我检查了ng-app的发生情况,它只在主页上发生过一次。

任何人都知道为什么会这样?

Angular 1.1.5(1.0.7同样)

Index.cshtml

<html lang="en" ng-app="app">
<head>
    <meta charset="utf-8" />
    <title></title>
    <meta name="viewport" content="width=device-width" />
    @Cassette.Views.Bundles.RenderStylesheets()
</head>


<body id="body" class="container-fluid"  ng-app="app">
    <div ng-view ng-cloak class="row-fluid">
    </div>
    @Cassette.Views.Bundles.RenderScripts()
</body>
</html>

App.js:

var app = angular.module('app', ['ngResource', 'ngCookies'])
    .config(['$locationProvider', '$routeProvider', '$httpProvider', function ($locationProvider, $routeProvider, $httpProvider) {
        var access = RoutingConfig.accessLevels;

        $locationProvider.html5Mode(false);
        $routeProvider
            .when('/',
                {
                    redirectTo: '/Entries'
                })
            .when('/Login',
                {
                    templateUrl: 'Views/Security/Login',
                    controller: 'LoginController',
                    access: access.anonymous
                })
            .when('/Entries',
                {
                    templateUrl: 'Views/Entry/List',
                    controller: 'EntryListController',
                    access: access.user
                });
    }])
    .run(['$rootScope', '$location', 'SecurityService', function ($rootScope, $location, SecurityService) {
        $rootScope.$on("$locationChangeStart", function (event, next, current) {
            $rootScope.error = null;
            if (!SecurityService.Authorize(next.access ? next.access : RoutingConfig.accessLevels.public)) {
                if (SecurityService.IsLoggedIn()) {
                    $location.path('/');
                }
                else {
                    $location.path('/Login');
                }
            }
        });
    }]);

只是为了确保两个模板都是空的。 $ rootScope正在改变第二个$ locationChangeStart :(

1 个答案:

答案 0 :(得分:3)

无法重现您的问题 - 但我们已经看到双控制器/范围的类似问题,因为我们意外地指定了控制器两次 - 一次在路由表($routeProvider.when(..., controller="xyzCtrl", templateUrl="xyz.html"中)并再次在我的模板中(data-ng-controller="xyzCtrl")。删除其中任何一个修复了问题。希望这是正确方向的线索。