Скажем у вас есть объект с методом:В Угловом, каким образом вы можете автоматически обновлять привязку данных, привязанную к методу?
/*
chat.author == a String
chat.message == a String
chat.timestamp == a Date
chat.timeago() == a method that returns a string, like "2 minutes ago"
*/
И ваш HTML выглядит примерно так:
<div>{{ chat.author }}</div>
<div>{{ chat.message }}</div>
<div>{{ chat.timeago() }}</div>
возвращаемое значение chat.timeago() будет меняться в зависимости от времени, прошедшего с момента чата .timestamp, поэтому он может измениться с «только сейчас», «несколько секунд назад», до «минуты назад», «2 часа назад» и т. д.
Какие существуют опции, чтобы указать Угловое, когда необходимо обновить данные, привязанные к методу, и какая опция является наиболее el egant или традиционным способом в Angular?
Я бы предложил использовать директиву для представления timeago и просто использовать определенные интервалы и нарисовать ее вручную на ui с помощью собственной операции DOM, такой как 'innerHTML' или даже с jqlite .text/.html. Если вы используете $ timeout, $ interval (очень плохо), он снова запустит цикл дайджеста и всех наблюдателей ... Просто чтобы обновить timeago, это слишком много, особенно когда ваше приложение становится больше. С угловым вы должны ответить на цикл дайджеста, чтобы обновить привязки, и вы закончите делать тайм-аут и т. Д., Который имеет свои недостатки. – PSL
@PSL Хорошая точка здесь. Директива была бы более сложным, но лучшим способом добиться этого. – Okazari
@Okazari да, но это будет определенно стоить, но не сложнее реализовать. Пила во время последнего ng-conf была презентация, где это обсуждалось, даже для эффектов mouseover/mouseout не используют ng- * события, а просто связывают события вручную. На более крупном ui или (когда он станет больше) вы получите серьезные проблемы с производительностью. Так что просто вызовите цикл дайджеста только тогда, когда это действительно стоит. – PSL