2017-01-18 2 views
0

각 행의 변환을 위해 ng-repeat 안에 필터를 실행합니다. 필터 3 매개 변수를 보냅니다.각도 1 필터 번역

  1. 번역해야하는 문자열 (기본 반환 값).
  2. 이벤트 ID (문자열이이 이벤트에 속함).
  3. 언어 코드 (사용자가 선호).

필터는이 개 매개 변수를 사용하여 서비스에 데이터를 전송 :

  1. 언어 -code를.
  2. 이벤트 ID (문자열이이 이벤트에 속함). 서버 응답이

은 번역 된 문자열이 포함되어 있습니다.

문제는 내가 "기능을 다음"의 밖으로 반응을 얻을 수 있다는 것입니다. 나는 약속을 사용하고 $ q를 해결하려고 노력했지만 여전히 성공하지 못했습니다.

코드 :

//* Filter translate this *// 
app.filter('translateThis', ['$q', 'translateEvents', function ($q,  translateEvents) { 
    var pending = {}; 
    // FILTER WRAPPER TO COPE WITH ASYNCHRONOUSLY 
    return function(item, eventId, lngCode) { 
     // check if eventId it exits and it must to be integer 
     var check = isInt(eventId); 
     if (check == false) { 
      return item; 
     } 
     if ($localStorage.doTranslateEvents == 2) { 
      if (!(item in pending)) { 
       pending[item] = null; 
       translateEvents.translate(lngCode, eventId).then(function (response) { 
        console.log(response.data);// i get the data here ! 
        pending[item] = response.data; 
       }); 
      } 
      console.log(pending[item]);// i do not get it here ! 
      return pending[item] || item; 
     } else { 
      return item; 
     } 
    }; 
} 

/* the following service is responsible to translate events 
* finally this service returns promise. 
*/ 
    app.service('translateEvents',['$q', '$localStorage', '$http', 'rootUrl', '$rootScope', '$timeout', function ($q, $localStorage, $http, rootUrl, $rootScope, $timeout) { 
    return { 
     translate : function (toLanguageCode, eventId) { 
      /* 
      * Then we do lng from and lang to validation and set defaults. 
      */ 
      if (eventId != null || eventId != undefined) { 
       if (toLanguageCode != 'en' && toLanguageCode != 'he' && toLanguageCode != 'ru' && toLanguageCode != 'es' && toLanguageCode != 'tr' && toLanguageCode != 'de' && toLanguageCode != 'fr' && toLanguageCode != 'it' && toLanguageCode != 'nl' && toLanguageCode != 'gan' && toLanguageCode != 'zh' && toLanguageCode != 'ja' && toLanguageCode != 'no' && toLanguageCode != 'ko' && toLanguageCode != 'pt' && toLanguageCode != 'tlh' && toLanguageCode != 'ar') { 
        toLanguageCode = 'en'; 
       } 
       return $http.get("https://xxx?id=" + eventId + "&lng=" + toLanguageCode); 
      } else { 
       return null; 
      } 
     } 
    } 
}]); 

나는 내가 뭘 잘못 이해하지 않습니다.

+0

에 좋은 읽기입니다? –

+0

무엇을 의미합니까? – avix

+0

코드에 html이 필요합니다. –

답변

0

난 당신이 비동기 필터를 사용 야해라고 생각하고 싶다. 그들은 더 많은 상태를 도입하고 논리를 서비스와 컨트롤러로부터 멀리합니다.

각도 필터 단순 객체를 반환하거나 쉽게 인쇄 데이터 유형을 리턴에 의존한다. 약속은 그 어느 것도 아닙니다. Angular1.2까지는 약속의 가치를 변경할 수 있으며 UI가 업데이트됩니다. 각도 1.3 필터로

는 입력 변경하는 경우 종종 있으므로 표시되는 데이터 만 변경하는 것이 업데이트되지 않습니다. filter.$stateful=true을 사용하면 필터를 업데이트해야한다고 표시하지만 권장하지 않습니다.

다른 스레드에서이 대답은 당신이 코드를 제공 할 수이 https://stackoverflow.com/a/27771259/1408733