0

DB 호출을 보내고 인터셉터에서 오류 코드를 캡처하고 경고를 표시하는 동안 응용 프로그램에 대한 알림 서비스를 전역 적으로 만들었습니다.중계기의 중복은 허용되지 않습니다? 고유 한 키를 지정하려면 '추적 기준'표현을 사용하십시오.

각도 알림 서비스에서 중복 된 오류 메시지를 피하는 방법. 서버 호출 응답을 호출 컨트롤러 내부

var interceptor = function ($q, alerts, $rootScope, $timeout, $location, alertsManager) { 

        return { 
         request: function (config) { 
          console.log(config); 
          return config; 
         }, 
         response: function (response) { 
          var deferred = $q.defer(); 
          //$rootScope.$broadcast('loginRequired'); 
          //$scope.alerts.push({ msg: "Request done !" }); 
          return response || $q.when(response); 
         }, 
         responseError: function (rejection) { 
          if (rejection.status == 500) 
          { 

           var deferred = $q.defer();       
           $rootScope.$broadcast('loginRequired'); 

           return $q.reject(rejection); 
          } 

          console.log(rejection.status); 
          return $q.reject(rejection); 
         } 
        } 
       }; 

      $httpProvider.interceptors.push(interceptor); 

인터셉터 코드입니다.

LoginService.AfterLogin(UserName, Password)).then(function (response) { 

     },function (status) { 

         if (status === 500) { 

          alert("200"); 

          $rootScope.$on("loginRequired", function (e) {       

          alertsManager.addAlert('Technical Error Occurred.Please contact the System Administrator for the further support!!', 'alert-success'); 
          }); 

         } 

        }); 

공장 알림 서비스

App.factory('alertsManager', function() { 
    return { 
     alerts: {}, 
     addAlert: function (message, type) { 
      this.alerts[type] = this.alerts[type] || []; 
      this.alerts[type].push(message); 
     }, 
     clearAlerts: function() { 
      for (var x in this.alerts) { 
       delete this.alerts[x]; 
      } 
     } 
    }; 
}); 

방법 항목 :

<div ng-controller="AlertsController">   
      <div ng-repeat="(key,val) in alerts" class=" alert {{key}}" id="alert-notify"> 
       <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
       <div ng-repeat="msg in val">{{msg}}</div> 
      </div> 
</div> 

enter image description here 방법 항목 : 방법 2 : 내가 $ 지수에 의해 트랙을 사용하고 이 중복지고.

<div ng-controller="AlertsController">   
      <div ng-repeat="(key,val) in alerts track by $index" class=" alert {{key}}" id="alert-notify"> 
       <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
       <div ng-repeat="msg in val track by $index">{{msg}}</div> 
      </div> 
</div> 

enter image description here

+1

왜 angular2로 태그입니까? – yurzui

+0

마지막 예가 정확하지 않습니까? 실제 데이터를 보여줄 수 있으므로 어떤 모습인지 알 수 있습니까? – tasseKATT

+0

나는 당신에게 무슨 말을하는지, 2 번 오류 응답이 나타나지 않고 중복 오류를 보여줍니다. –

답변

0

시도 사용 MSG (또는 msg.someKey이 대상입니다)보다는 $ 인덱스

<div ng-repeat="msg in val track by msg">{{msg}}</div> 

하지만 MSG는 동일하지해야합니다. 이

<div ng-repeat="(key,val) in alerts track by key" class=" alert {{key}}" id="alert-notify"> 
       <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
       <div ng-repeat="msg in val track by $index">{{msg}}</div> 
      </div> 

$ 지수는 두 번째 중계기 좋은 맞는 시도

+0

'$ index'도 객체와 함께 작동해야합니다. – tasseKATT

+0

오류 기능이 3 번 실행 되었기 때문에 위 스크린 샷에 표시된 것과 같은 메시지가 중복 표시되도록 지정하면됩니다. –