2016-07-15 6 views
1

Там пример plunk показывает довольно простую страницу, где у нас есть один родительский компонент и один дочерний компонент. От родителя к ребенку мы передаем два значения, один из которых является строковым, а другой - массивом.Связывание строкового поля от дочернего к родительскому компоненту не работает

<child [aList]="sharedList" [aString]="sharedString"></child> 

Проблема в том, что я обновляю значение строки, которое оно обновляет только в дочернем компоненте, но не в родительском. Но если я обновляю значение массива из дочернего компонента, он будет обновляться как (дочерний, так и родительский).

Так что мой вопрос в том, почему строковое значение не обновляется в родительском объекте от родителя, но имеет значение массива. Что я делаю неправильно.

ответ

2

В Javascript примитивные типы (строки, цифры и т. Д.) Являются неизменяемым. Объекты (сложные типы, такие как массивы, объекты, функции и т. Д.) Изменяются и передаются по ссылке. Это означает, что когда вы передаете строку из родителя в дочерний, вы действительно передаете копию значения, то есть другую строку.

Когда вы позже измените примитивное значение в дочернем, исходный родительский трюм не будет обновляться автоматически.

Пока вы передаете объект (например, массив), родительский и дочерний, оба будут работать со ссылкой на тот же объект. Изменения в одном отражены в другом.

+0

Спасибо за ответ. Я понимаю, что из простого представления JavaScript, но в первом угловом мы можем написать что-то вроде этого '', и после того, как мы изменим это значение в директиве, это будет изменен контроллер. Возможно, задайте неправильный вопрос (извините за это), мой реальный вопрос заключается в том, как реализовать это в Angular 2. Я обновляю plunk для большего сходства с моей проблемой. – GrumpySeal

Смежные вопросы