【问题标题】:Angular controller loads only the first time in IEAngular 控制器仅在 IE 中第一次加载
【发布时间】: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


【解决方案1】:

在 IE 下运行应用程序的一个常见技巧是您不能放置 console.log。

所以只需注释掉这一行:

console.log("Database home controller running");

【讨论】:

  • 这听起来不对,如果您有来源说明,否则我很乐意阅读。无论哪种方式,我都通过删除所有控制台日志进行检查,这没有任何区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2020-01-02
  • 2021-05-31
  • 2017-04-29
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多