2016-08-14 68 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; 
    }) 
} 

为了澄清我想打电话给getmovieFactoryFN的getMovieController内时addMovie函数被调用的addMovieController。

+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

寻求最简单的解决方案。谢谢。 –

相关问题