1

Я регистрирую событие $translateChangeSuccess внутри контроллера (после запуска контроллера).

$rootScope.$on('$translateChangeSuccess', function() { 
    console.log("It entered translateChangeSuccess"); 
    A = $translate.instant('aaa'); 
    B = $translate.instant('bbb'); 
}); 

Таким образом, 98% случаев, когда событие срабатывает после включения/выключения контроллера. Но примерно 2% времени я твердо верю, что событие излучает до того, как контроллер создает экземпляр (т. Е. Регистрирует событие). Поэтому использование события $ translateChangeSuccess ненадежно.

Что можно сделать, чтобы этого избежать? Как я могу заставить событие стрелять каждый раз в обязательном порядке?

+0

Что вы собираетесь там делать в '$ translateChangeSuccess'? – Thaadikkaaran

+0

@JaganathanBantheswaran Привет, я обновил код. im делает перевод в нем. – radiance88

ответ

1

Вы не можете избежать вышеупомянутого состояния. Поскольку $translateChangeSuccess будет запущен каждый раз, когда есть изменение в культуре перевода (locale) независимо от того, инициирован ли ваш контроллер или нет.

$translateChangeSuccess начнет прослушивание слушателей, зарегистрированных уже для этого события, и не будет ждать, пока ваш контроллер начнет работу и зарегистрирует ваш слушатель.

И, если $translateChangeSuccess уволен уже до запуска вашего контроллера, это означает, что в культуре/локали нет изменений. поэтому ваши заявления о переводе будут выдавать результаты с использованием последней культуры/локали.

Таким образом, в конструкторе или инициализации функции вашего контроллера, вы можете иметь что-то вроде этого,

function init() { 

    translate(); // execute this because $translateChangeSuccess might have fired already. 

    $rootScope.$on('$translateChangeSuccess', function() { 
     console.log("It entered translateChangeSuccess"); 
     translate(); 
    }); 

} 

function translate() { 
    A = $translate.instant('aaa'); 
    B = $translate.instant('bbb'); 
} 
Смежные вопросы