Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularJS拦截器:访问父控制器方法_Javascript_Angularjs - Fatal编程技术网

Javascript angularJS拦截器:访问父控制器方法

Javascript angularJS拦截器:访问父控制器方法,javascript,angularjs,Javascript,Angularjs,在我的应用程序中,我对http请求进行了不同的操作,例如: $scope.getArticle = function(id) { $http.get('/app/' + id, { headers: { 'Content-Type': 'application/json', } }) .success(function(response) {

在我的应用程序中,我对http请求进行了不同的操作,例如:

      $scope.getArticle = function(id) {
        $http.get('/app/' + id, {
            headers: {
              'Content-Type': 'application/json',
            }
          })
          .success(function(response) {

          })
          .error(function(data, status, headers, config) {
          });
      };

      $scope.displayAlert = function (message) {
        var modalHtml = '<div class="modal-header"><h3>Warning</h3></div>';
        modalHtml += '<div class="modal-body"><strong>' + message + '</strong></div>';
        modalHtml += '<div class="modal-footer"><button class="btn-md btn-green pull-right" ng-click="$dismiss()">OK</button></div>';
        $scope.modalInstance = $modal.open({
          template: modalHtml,
          size: 'sm',
          backdrop: 'static',
          keyboard: false
        });
        $timeout(function () {
          $scope.modalInstance.close('closing');
        }, 5000);
      };
但是当我有错误调用
$scope.displayAlert()
方法时,我怎么能在这个拦截器中呢

我当然可以这样做:

$scope.getArticle = function(id) {
            $http.get('/app/' + id, {
                headers: {
                  'Content-Type': 'application/json',
                }
              })
              .success(function(response) {

              })
              .error(function(data, status, headers, config) {                
                $scope.displayAlert('error');
              });
          };

但这是个坏主意。。。怎么做

您可以使用
$rootScope
以及
$broadcast
$on
作为事件总线在组件之间进行通信。请注意,这可能会影响性能,因此在使用这些方法时应小心

为您服务:

var responseError = function (rejection) {
    var rootScope = rootScope || $injector.get('$rootScope');
    ....
    $rootScope.$broadcast('responseError',{
        message: 'Rejection Reason' }); 
在控制器中:

$scope.$on('responseError', function(event, data){
    $scope.displayAlert(data.message); });

“但有些地方出了问题…”什么地方出了问题/不起作用?在发布之前-1写下什么地方出了问题?@Claies如何在此处使用它?您需要在此处分离关注点
displayAlert
看起来像一个通用错误模式,因此它不应该是特定于特定控制器的方法-它应该存在于自己的服务中(或在拦截器中)@user2943490否)每个控制器的某些样式不同,如果是通用的?那怎么编码呢?
$scope.$on('responseError', function(event, data){
    $scope.displayAlert(data.message); });