Есть ли способ повторно обработать фильтры AngularJS? Я пытаюсь использовать фильтр угловой валюты, который отображает символ валюты на основе загруженного языкового файла. Мне нужно повторно отобразить фильтры, когда я программно загружаю соответствующий языковой файл.Как отремонтировать угловые фильтры
ответ
Да. Для каждого выражения на вашем шаблоне существует установка $ watch. Фильтры являются частью этой оценки $ watch, поэтому вам просто нужно вызвать цикл дайджеста. После того, как вы загрузите свой языковой файл, обязательно вызовите $ scope. $ Apply(), который заново запустит все ваши часы и обновит ваш шаблон, если конечный результат любых часов изменится.
Документация Developer Guide/Filters говорит:
В шаблонах, фильтры выполняются только тогда, когда их входы имеют изменились.
Таким образом, если мы хотим, чтобы фильтр был без гражданства, но реагируя на изменения какого-либо внешнего состояния, мы должны сделать это состояние входным для фильтра. Этот вход может быть чисто виртуальным, не имея никакого отношения к внутренней логике фильтра, только инициируя его выполнение.
Я недавно столкнулся с этой проблемой, выясняя, как динамически повторно отображать output.js на событие изменения локали. Это моя функция фильтра:
function FromNowFilter($moment) {
return function (value, langKey, omitSuffix) {
//langKey parameter is only used for triggering an update when language is changed
return $moment(value).fromNow(omitSuffix);
}
}
Из фильтров Angular 1.3 нет апатридов, что означает, что фильтры будут обновляться только тогда, когда их вход будет изменен.
Если вы хотите обновить фильтр, вам необходимо сделать фильтры $stateful.
app.filter('translate', translate);
translate.$inject = ['$rootScope'];
function translate($rootScope){
filter.$stateful = true;
return filter;
function filter(str) {
return i18n[$rootScope.currentLang][str];
};
}
Фильтры будут выполняться на каждом $ digest, но это нецелесообразно по принципу.
- 1. Угловые фильтры
- 2. Угловые флажки Фильтры uncheckedAll
- 3. Угловые фильтры clickable result
- 4. Угловые фильтры JS
- 5. Угловые вложенные фильтры контроллера
- 6. Угловые (V1.5.3) фильтры
- 7. Угловые фильтры флагов Js
- 8. Угловые заводы и фильтры $ http
- 9. Угловые фильтры JS работают неожиданно?
- 10. Угловые вложенные фильтры по флажку
- 11. Как использовать угловые фильтры на Frontend/Templates
- 12. Как использовать угловые js Фильтры Внутри контроллера
- 13. Угловые фильтры: как предварительно фильтровать такие угловые фильтры, рассматривают только частичный объект всего объекта данных
- 14. Угловые вложенные фильтры и бесконечные $ digest Loop
- 15. Угловые фильтры не работают, если $ compile service
- 16. угловые множественные фильтры через ng-repeat
- 17. Угловые фильтры: поиск двух категорий из многих
- 18. Как отремонтировать функцию перемещения
- 19. Как отремонтировать Resharper?
- 20. Как отремонтировать частную собственность?
- 21. Как отремонтировать установку Trac
- 22. Как отремонтировать `information_schema```TABLES`?
- 23. Как отремонтировать мой монгод?
- 24. Угловые фильтры, не работающие в компоненте
- 25. Невозможно получить угловые фильтры работы нг-параметры
- 26. Почему угловые 2 «Фильтры» называются «Труба»?
- 27. Угловые пользовательские фильтры - форматирование даты вопроса
- 28. Как условно применять Угловые фильтры по ng-повторению атрибутов объекта?
- 29. Java - как отремонтировать некорректный JSON?
- 30. Неправильно отформатированный CSV, как отремонтировать?
Я бы предложил использовать функцию '$ timeout' вместо' $ scope. $ Apply'. –
Можете ли вы уточнить, почему это было бы предпочтительнее? $ timeout просто отложит $ scope. $ apply(), пока поток рендеринга браузера не получит контроль. Это не кажется необходимым. – dtabuenc
В некоторых случаях «$ scope. $ Apply» может вызвать ошибку TTL. Но переход на '$ timeout' не будет, так как он создаст новый цикл $ digest. Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо –