2016-08-14 4 views
2

Ich habe einen Controller, der eine Liste von Filmen erstellt. Der Controller ruft dies durch Aufruf einer Funktion innerhalb einer Fabrik auf und fügt dann die Antwort in einen Bereich ein, der sie in der Ansicht anzeigt.Call-Methode von verschiedenen Controller mit Angular

Ich habe auch einen anderen Controller, in dem ich eine AddMovie-Funktion habe. So können Nutzer Filme zu ihrer Beobachtungsliste hinzufügen. Mein Problem ist, dass, wenn ein Benutzer einen Film hinzufügt, die Ansicht (oder besser der Bereich vom ersten Controller) nicht aktualisiert wird und ich die Seite neu laden muss, um den neu hinzugefügten Film zu sehen.

Was wäre der beste Weg, um die Funktion vom ersten Controller (der die Daten von der Fabrik abruft und in den Bereich legt) zu rufen, wenn die Funktion addMovie aufgerufen wurde?

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; 
    }) 
} 

Um zu klären, ich die getmovieFactoryFN innerhalb des getMovieController nennen wollen, wenn die addMovie Funktion im addMovieController genannt wird.

+0

Ich würde '$ broadcast' benutzen, um Ihre Veranstaltung an alle Steuerungen zu verteilen, die ist zu hören. –

Antwort

1

Verwenden $broadcast wie:

$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 */}); 
    }); 
}; 

in anderen Controller:

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

Gehen für die einfachste Lösung. Vielen Dank. –

Verwandte Themen