使用Angular从不同控制器调用方法

时间:2016-08-14 09:58:02

标签: angularjs

我有一个控制器可以创建一个电影列表。控制器通过调用工厂内的函数来完成此操作,然后将响应放在一个范围内,在视图中显示它。

我还有一个不同的控制器,我有一个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;
    })
}

澄清我想在addMovieController中调用addMovie函数时调用getMovieController中的getmovieFactoryFN。

1 个答案:

答案 0 :(得分: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();
 });