Angular - 我可以在Http拦截器服务中使用$ mdDialog吗?

时间:2016-09-22 02:35:51

标签: angularjs angular-material

我使用http拦截器来处理错误。一旦捕获某些错误,是否可以使用md-dialog弹出一个显示错误消息的窗口。将circular dependency注入服务时发生$mdDialog错误。如果errorMsg可以在此服务中使用,我应该在哪里绑定$mdDialog

拦截器:

.factory('httpInterceptor', ['$q', '$mdDialog', function($q, $mdDialog){
   return {
        'response': function(res) {
            var status = res.data.status;
            var errorMsg = res.data.payload.message;
            if(status === 'fail') {
              $mdDialog.show({
               // controller: ???,
               // scope: ???,
                templateUrl: 'error.html',
              })
              return $q.reject(res);
            } 
            return res;
        }
     }
}])

1 个答案:

答案 0 :(得分:2)

是的,您可以使用控制器显示$ scope变量并解析,

 $mdDialog.show({
      controller: function($scope, $mdDialog){
        // do something with dialog scope
      },
      template: '<md-dialog aria-label="My Dialog">'+
                    '<md-dialog-content class="sticky-container">{{test}}' +
                    '</md-dialog-content>' +
                    '<md-button ng-click=close()>Close</md-button>' +
                    '</md-dialog>',
      controller: 'modalCtrl',
       resolve: {
        test: function () {
          return 'test variable';
        }
      }
    });

<强>控制器:

app.controller('modalCtrl', function($scope, $mdDialog, test) {
  $scope.test = test;
});

DEMO