【问题标题】:No "onload" event, on redirect back Angularjs没有“onload”事件,重定向回Angularjs
【发布时间】:2016-06-29 04:12:01
【问题描述】:

首先,我找到了这个答案,但它们不适合..

我的问题是,当用户被重定向回页面时,我希望我的应用程序的 AngularJS 部分重新加载某些内容。 登录流程是这样的

a.php -> [FB 魔法] -> callback.php -> a.php

我的问题是<body onload="foo()"> 只触发一次。 DOMContentLoadedwindow.onload 也是如此。

对于 a.php,就像用户从未离开过页面一样。

当用户被重定向回来时,如何让 AngularJS 调用一个函数(在控制器中定义)? (我正在使用 PHP 进行还原

编辑:我的控制器的样子 ->

pwm.controller('EventListController', ['$scope', 'pwmApi',
function EventListController($scope, pwmApi) {
    $scope.fetched = false;
    $scope.events = [];
    let update = function () {
       <!-- Does stuff, is a bit long ->
    };
    update();
}]);

所以:) update();方法在控制器的构造上调用。当我被重定向回来时,不会调用更新函数 - 刷新页面会有所帮助。

我真诚地希望这个澄清有所帮助。重定向回来后重新加载页面会有所帮助,但现在什么也没有发生......

【问题讨论】:

  • 当您重定向回发送带有 url ex 的参数。 rediredt='true' 并在控制器中超出它。
  • @AmitSirohiya:你能解释一下吗?
  • 你是使用 stateProvide 还是 routeProvider 来重定向?
  • @AmitSirohiya 我不使用任何这些,重定向发生在 PHP header("Location: $url");
  • @AmitSirohiya:我的问题出在 JS 方面(如何检测 JS/AngularJS 中的参数变化)[a.php?reload=true]

标签: javascript angularjs redirect


【解决方案1】:

你可以像这样制作 $url - $url = "abc?rediect='true';

这里redirect='true' 表示您正在重定向。

在您的 angularJs 控制器中执行此操作-

控制器

.controller('controller',function($location){
   var queryParameters = $location.search();

   // Check if redirect is true
   if(queryParameters.redirect === 'true')}{
      // Call a function
      myFunaction();
   }
});

更新 - 在查询字符串中,所有值都会被刺痛,所以布尔值 true 也会变成 'true' 所以你必须像这样处理不是布尔值的字符串。

【讨论】:

  • queryParameters = {}
  • 什么 url 在浏览器中生成检查?
  • 改进了我的代码在控制器功能中注入 $location 服务。
  • ui/?reload=true(当然我把queryParameters.redirect改成了queryParameters.reload我确实注入了位置。'$scope','$location','pwmApi'``
  • 主要问题是:虽然我在控制器中调用了Update,但它不会执行。所以我看不到你的代码应该如何执行..?
【解决方案2】:

我找到了一种使用 PHP 的方法 (https://stackoverflow.com/a/8577805/1870799)

我现在使用的是 header("Location: $url");(我原来的重定向解决方案)和 header("Location: $url?redirect=true"); header("refresh: 0;url=$url");,它按预期工作。

但是... AngularJS 是否可以对 Location 标头做同样的事情?

【讨论】:

    【解决方案3】:

    监听 onload 不适合 angular。

    如果您使用 ngRoute 或 ui-router 甚至 ng-controller 进行路由,关联的控制器将再次执行。如果还不够,可以监听路由模块提供的事件:$routeChangeSuccess/$stateChangeSuccess

    【讨论】:

    • 他已经说过他没有使用 $routeProvider 或 $stateProvider 看到他的问题的评论。他正在通过 PHP 重定向。
    • 那么这不是角度问题,如果重定向后 onload 没有触发
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多