У меня есть два контроллера, один в другом. Теперь я знаю, что дочерняя область наследует свойства из родительской области, но есть ли способ обновить переменную родительской области? Пока очевидных решений не встречал.
В моей ситуации у меня есть контроллер календаря в форме. Я хотел бы обновить даты начала и окончания из родительской области (которая является формой), чтобы форма имела даты начала и окончания при отправке.
Ответы:
Вам нужно использовать объект (не примитив) в родительской области, и тогда вы сможете обновить его непосредственно из дочерней области
Родитель:
Ребенок:
Рабочая демонстрация : http://jsfiddle.net/sh0ber/xxNxj/
См. Какие нюансы наследования прототипа / прототипа области видимости в AngularJS?
источник
Есть еще один способ выполнить эту задачу - не использовать
$scope.$parent
переменную.Просто подготовьте метод для изменения значения в родительской области и используйте его в дочерней. Как это:
Это также работает и дает вам больше контроля над изменениями значений.
Вы можете также вызвать метод даже в HTML , как:
<a ng-click="changeSimpleValue('y')" href="#">click me!</a>
.источник
Это также работает (но не уверен, следует ли это передовой практике или нет)
источник
Когда вы назначаете примитивный атрибут области, он всегда является локальным по отношению к области (возможно, создается «на лету»), даже если родительская область имеет атрибут с тем же именем. Это дизайнерское решение, и ИМХО хорошее.
Если вам нужно изменить какой-то примитив (целые числа, логические значения, строки) в родительской области видимости, из представления вам нужно, чтобы он был атрибутом другого объекта в этой области, поэтому присвоение может выглядеть так:
и он, в свою очередь:
viewData
объект из любой области, в которой он определенmyAttr
атрибуту.источник
Для доступа к переменным, объявленным в родительском элементе, мы должны использовать $ parent в дочернем контроллере или файле шаблона.
В контроллере
В шаблоне html
источник