这个问题让我头疼 - 我不知道为什么,但在我的应用程序中我有两个$ 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 :(
答案 0 :(得分:3)
无法重现您的问题 - 但我们已经看到双控制器/范围的类似问题,因为我们意外地指定了控制器两次 - 一次在路由表($routeProvider.when(..., controller="xyzCtrl", templateUrl="xyz.html"
中)并再次在我的模板中(data-ng-controller="xyzCtrl"
)。删除其中任何一个修复了问题。希望这是正确方向的线索。