2016-08-14 19 views
2

私はムービーのリストを作成するコントローラを持っています。コントローラは、ファクトリ内でファンクションをコールしてレスポンスをスコープに入れ、ファンクションをビューに表示します。角度の異なるコントローラからの呼び出し方法

私はaddMovie機能を持っている別のコントローラも持っています。ユーザーはウォッチリストにムービーを追加できます。私の問題は、ユーザーがムービーを追加すると、ビュー(または最初のコントローラーのスコープが改善されている)が更新されず、新しく追加されたムービーを表示するためにページをリロードする必要があるということです。

addMovie関数が呼び出されたときに、最初のコントローラ(ファクトリからデータを取得してスコープに配置)から関数を呼び出す最も良い方法は何でしょうか?

addMovieController:

$scope.addMovie = function (movie) { 
    movieaddFactory.selectMovie(movie).then(function(response){ 
     movieaddFactory.addMovie(response); 
     Notification.success(movie.title + ' has been added to your watchlist'); 
     $scope.movies = []; 
     $scope.overlay = false; 
     $scope.searchquery = '' 
    }); 
}; 

getMovieController:

getmovieFactoryFN = function(){ 
    getmovieFactory.getMovies().then(function(response){ 
     $scope.mmovies = response; 
    }) 
} 

私はのaddMovie機能がaddMovieControllerに呼び出されたときにgetMovieController内getmovieFactoryFNを呼び出したい明確にします。

+0

私が聞いているすべてのコントローラにあなたのイベントを配布し、 '$のbroadcast'を使用します。 –

答えて

1

使用$broadcastのような:

他のコントローラで
$scope.addMovie = function (movie) { 
    movieaddFactory.selectMovie(movie).then(function(response){ 
     movieaddFactory.addMovie(response); 
     Notification.success(movie.title + ' has been added to your watchlist'); 
     $scope.movies = []; 
     $scope.overlay = false; 
     $scope.searchquery = '' 

     $rootScope.$broadcast('onAddMovieEvent', {/* some data */}); 
    }); 
}; 

$scope.$on('onAddMovieEvent', function (event, _data) { 
    // event.preventDefault(); // if you want to stop this event to spread over all your application 
    getmovieFactoryFN(); 
}); 
+0

最も簡単な解決策を検討しています。ありがとう。 –

関連する問題