2015-02-07 28 views
0

我正在使用AngularJS,我试图切换到新视图并发送另一个控制器(管理新视图的控制器)应拦截和详细说明的事件。AngularJS:将事件发送到另一个控制器并重定向到新位置

与此同时,当前控制器正在发送一个HTTP请求,其响应应作为参数传递给事件。以下是第一个控制器的代码:

// do some stuff and initialize FIND_URL and nextpage variables 
$http.get(FIND_URL).success(function(response) { 
    details = response; 
    $rootscope.$broadcast('detailsReceived', details); 
}); 

$location.path(nextpage); 

FIND_URL构建将参数附加到基本URL。 事件被正确发送。另一个控制器如下:

appName.controller("otherController", function($rootScope) { 
    console.log("Initialize"); 
    $rootScope.$on('detailsReceived', function(event, details) { 
     console.log("EventReceived"); 
     if(details) { 
      $scope.localDetails = details; 
     } 
    }); 
}); 

控制器是不相关的:每个html页面引用一个控制器。 但是,该事件没有被otherController接收,但它被初始化。另外,nextpage是正确显示的,但当然是空的,因为细节不在其范围内,因为没有收到事件。 我也试过使用$ scope而不是$ rootScope,但我遇到同样的问题:没有收到事件。

我无法使用服务。

我必须误会,但我不知道在哪里。你可以帮我吗?

+0

这整个设计感觉错了..你为什么说你不能使用服务? – 2015-02-07 17:54:44

+0

我在另一点使用相同的方法,其中现在发送事件的相同控制器实际上正在接收第三个控制器的事件。它有效。不使用服务是我给的一个约束。 – Manu 2015-02-07 18:02:30

+0

你确定这个事件是真的被广播,你$ https.get成功吗? – Bricktop 2015-02-07 18:51:38

回答

0

发现的解决方案:

1)将GET请求发送到第二控制器 2)更改路由通过增加用于构建FIND_URL作为URL参数的参数 3)使用$ routeParams访问传递的参数在第二控制器。

相关问题