【问题标题】:Angular - Update parent $scope from child windowAngular - 从子窗口更新父 $scope
【发布时间】:2014-12-31 01:45:35
【问题描述】:

这是我要解决的问题。

我有一个window.open 功能打开一个小窗口,供用户使用他们选择的社交网络登录/注册。用户登录后,我希望关闭小窗口并让原始父窗口的 $scope 更新而无需刷新页面。

我这样做的全部目标是不中断用户对网站的体验。该站点是一个音乐站点,因此如果用户正在听一首歌曲并且页面重新加载,他们将失去在站点中的位置并最终不开心。

我想就是这样。

app.controller('MainCtrl', [

  $scope.loginTrigger = function() {
    window.open("http://www.url.com/login", "_blank", "toolbar=yes, scrollbars=yes, resizable=no, top=0, left=100, width=1000, height=600");
  }

  if ($location.hash()) {
     $http({
      method: 'POST',
      url: '/users/oauth_complete/',
      data: data,
     }).success(function(data){
        if(!data.success){
         $window.location.href = '/usersetup';
        }else {
         $scope.LoggedInUser = data;
         storage.set('LoggedInUser', data);

         //Here is my current code: Small window closes and the parent page reloads but I don't want to use refresh as it will interrupt the user experience.
         window.close();
         window.opener.location.reload();
        }
     },"JSON");
  };

}]);

【问题讨论】:

  • 您需要向父窗口的控制器发送一条消息,表明发生了一些令人兴奋的事情,然后它才能做它需要做的事情。此处用于消息传递的代码示例...stackoverflow.com/questions/27196693/…
  • 很抱歉,但我不确定我是否关注了您的帖子。我目前在同一个控制器中拥有所有代码。原因是一旦用户单击我网站上的“连接到 XYZ”按钮,它将重定向到我指定的 URI,但在 url 的末尾有一个哈希,但这就是为什么我有 if(hash)主控制器中的代码---用户可以在任何页面上。我试图让它与工厂合作,但失败了。举个例子,这基本上就是我想要完成的事情......oauth.io/signup(弹出oauth窗口,用户授权,然后窗口隐藏和页面更新而无需重新加载)

标签: javascript angularjs angularjs-scope window.opener


【解决方案1】:

您可以使用 $emit 和 $on 在类之间“交谈”

在您的登录控制器中,您将使用 $emit。

$scope.$emit('eventName', myData);

然后在您的另一个控制器中,您将使用 $on 函数进行监听:

$scope.$on('eventName', function(event, data) { console.log(data); });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2010-11-20
    相关资源
    最近更新 更多