【发布时间】:2015-08-26 20:57:56
【问题描述】:
我正在尝试设置一个控制器,当用户导航到特定 url 时,该控制器会将用户重定向到定义的主页。这样不同的用户都可以拥有自己的登录页面。
我有一个状态
.state('database.home', {
url: '/home',
templateUrl: "app/Database/Home/home.html",
controller: "DatabaseHomeController"
})
还有一个控制器
(function (ng, app) {
"use strict";
app.controller(
"DatabaseHomeController",
["$rootScope", "$scope", "$state", "$stateParams", "sessionService", function ($rootScope, $scope, $state, $stateParams, sessionService) {
console.log("Database home controller running");
$stateParams.systemName = sessionService.auth.DefaultSystem;
$stateParams.objectName = sessionService.auth.Homepage;
if ($stateParams.objectName) {
$state.transitionTo("database.object", $stateParams);
} else {
$state.transitionTo("login");
}
}]);
})
(angular, WebAppName);
这在 Internet Explorer 中一次有效,但在 Chrome/Firefox 中按需使用。
该行日志仅在我第一次单击主页链接或在 IE 中键入 url 时显示。以后每次看到
0x800a139e - JavaScript runtime error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
在 angular.js 中
编辑:
现在两个人问的太清楚了。 $stateParams 不是问题的原因。
if (sessionService.auth.Homepage !== "") {
$state.transitionTo("database.object", { objectName: sessionService.auth.Homepage, systemName: sessionService.auth.DefaultSystem });
} else {
$state.transitionTo("login");
}
行为完全相同,它只在 IE 上运行一次,但在 Firefox 和 Chrome 中每次都运行一次。
编辑 2:
将 $state.transistionTo 更改为 $state.go 没有任何区别,后续使用的无限循环仍保留在 IE 中。
【问题讨论】:
-
这可能与将变量分配给
$stateParams有关 -
如果是这样的话,我仍然希望 console.log 会触发。
-
也许这个链接会有一些用处stackoverflow.com/questions/13853844/…
-
谢谢。该链接中有一些有趣的相似之处,并且我尝试了很多东西。然而,当我发现这也是导致我在这里结束的问题时,它们都没有涵盖手动输入 url。
-
你为什么要为此使用 stateParams?正如我所见,“database.home”路由的 url 中没有参数。
var systemName = sessionService.auth.DefaultSystem; var objectName = sessionService.auth.Homepage; $state.transitionTo("database.object", {'objectName' : objectName, 'systemName': 'systemName' });
标签: angularjs