< - one way binding - данные записанные в компонент будут единожды инициализированны
= - two way binding - данные можно передавать в оба направления и компонент имеет постоянно обновленное значение
переинициализация "<"-байндинга возможна при ререндеринге парент-компонента
в случае использования "<"-байндинга желательно использовать хук onChange(chObj) и проверять изменения из вне...
такое делают уже когда появляется необхожимость в жесткой оптимизации приложения.... на ранних этапах мы вообще не смотрим на это и везде используется "="... после окончания релиза и по мере необходимости рефакторинга/оптимизаций / можно уже задумываться о том. что было бы лучше сделать для быстроты...
а если еще глубже идти. то посмотри на "::"-опцию)
и как я уже писал...
1) работу в компоненте нужно делать в onInit() а не в контроллере...
2) controllerAs: "$ctrl" - уже сам по себе default-value, и является избыточным
Имхо, “<“ следует использовать не для оптимизации, а для более явного потока данных
Если компонент изменяет пришедшие к нему данные так, что они меняются и у родителя — дело плохо. Завтра добавится ещё два компонента и потом ищи-свищи, где, как и когда данные меняются
Если же использовать функции типа on-value-changed, то это даёт офигенный контроль над данными - всегда можно понять откуда пришли изменения и решать — обновить оригинальный объект или нет