В моем шаблоне у меня есть что-то вроде этого:функция вызывается несколько раз из шаблона
{{formatMyDate(date)}}
но date
переменная сфера, которая не доступна немедленно, так это выражение будет вызывать функцию formatMyDate()
много раз (возвращение undefined
) перед возвратом правильного значения.
я мог проверить, если date
не равно нулю в пределах функции, но я предполагаю, что это будет более чистым НЕ вызывать функцию вообще, если date
является null
.
Любой способ достичь этого? Может ли наш пользовательский фильтр помочь мне?
EDIT:
Было высказано предположение о том, что такое поведение может быть нормальным, в зависимости от $ переваривать цикла.
Затем я установил scope.$watch
, чтобы проверить, сколько раз изменяется значение date
.
Обратите внимание, что я определяю их в директиве.
scope.$watch('date', function(value){
console.log('watched_date: ' + value)
})
и я ввел console.log() на моей formatMyDate
функции, а также
scope.formatMyDate = function(date){
console.log("called_date: " + date)
return dateService.format(date, 'YYYY-MM-DD')
}
Проверка консоли я получаю (псевдокод)
called_date: undefined
watched_date: undefined
called_date: undefined // many many times (around 20/30)
called_date: correctValue //2 or 3 times
watched_date: correctValue
called_date: correctValue //other 3/4 times
Я если это все еще связано с циклом $digest
или это ошибка в моем коде
Возможно, одноразовая привязка будет соответствовать вашим потребностям, если вы находитесь на Угловом> = 1.3. Проверьте это [здесь] (https://docs.angularjs.org/guide/expression). –
@NikosParaskevopoulos спасибо, но нет, я вынужден использовать версию 1.0.8 – Leonardo
Любая функция, вызываемая непосредственно из выражения или косвенно через ngRepeat/ngOptions (и тому подобное), потенциально будет вызываться несколько раз. Вот как работают угловые работы (см. [$ Digest] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$digest)). Тем не менее, я думаю, что всегда полезно добавить форматирование в выделенные фильтры. Вы проверили [фильтр даты] (https://docs.angularjs.org/api/ng/filter/date)? – Yoshi