2015-02-07 47 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訪問傳遞的參數在第二控制器。

相關問題