Почему не требуется @Output и emit события, если в @Input был передан массив?

Когда в Angular передается массив в качестве @Input, не требуется использовать @Output и emit события для обновления массива в родительском компоненте. Это происходит потому, что массив, переданный в качестве @Input, является объектом, и при изменении элементов внутри этого массива, эти изменения автоматически отражаются и доступны в родительском компоненте.

Когда родительский компонент передает массив в дочерний компонент через @Input, дочерний компонент создает ссылку на этот массив и имеет доступ к его элементам. Если в дочернем компоненте происходят изменения элементов этого массива (например, добавление, удаление или изменение элементов), то эти изменения будут видны и в родительском компоненте.

Это происходит из-за того, что в JavaScript и TypeScript объекты передаются по ссылке, а не по значению. Когда мы передаем массив в качестве @Input, мы фактически передаем ссылку на этот массив, а не его копию. Это означает, что как только дочерний компонент производит изменение элементов этого массива, эти изменения автоматически отображаются в родительском компоненте.

Нет необходимости использовать @Output и emit события для обновления массива в родительском компоненте, потому что Angular делает это автоматически. Но если вам все же нужно передать событие родительскому компоненту при изменении массива в дочернем компоненте, то вы можете использовать @Output и emit события.

В целом, использование @Input и @Output в Angular позволяет эффективно обмениваться данными между компонентами и позволяет избежать прямого доступа к данным другого компонента.