Как отправить данные от родителя к дочернему в AngularJS

Как отправить данные из родительского контроллера (индекс) в дочерний контроллер (компонент). Пожалуйста, посмотрите пример, вместо жесткого кодирования url я хочу отправить параметры для Title и URL из контроллера страницы в компонент. Я застрял, чтобы отправить его, и я не знаю, в чем проблема.

index.html

<div>
  <my-list obj="vm.obj"></my-list>
</div>

index.controller.js

this.obj = {
    testURL: "AngularJS",
    testName: "Testing Environment
}

mylistComponent.html

<span>{{vm.myTestName}}</span>
<a href="https://en.wikipedia.org/wiki/{{vm.myTestURL}}">AngularJS Wikipedia</a>

mylist.Component.js

binding: {
    obj: "="
}

this.goToPage = function() {
    this.myTestName = this.obj.testName;
    this.myTestURL = this.obj.testURL;
}

PLUNKER


person GeoCom    schedule 17.08.2017    source источник
comment
Вы проверили stackoverflow.com/questions/31225744/?   -  person    schedule 17.08.2017
comment
c-sharpcorner.com/blogs/   -  person    schedule 17.08.2017
comment
Вы можете транслировать события с помощью $rootscope.$broadcast и прослушивать их с помощью $rootscope.$on , таким образом вы можете передавать данные из одного компонента в другой, также есть несколько других методов. У вас могут быть общие фабрики для передачи данные.   -  person sivaram636    schedule 17.08.2017
comment
@slacker Спасибо, но я хочу использовать данные binding вместо службы и т. д.   -  person GeoCom    schedule 17.08.2017
comment
Почему не сервис для этого?   -  person    schedule 17.08.2017
comment
@ sivaram636 Вы не должны использовать для этого rootscope. Поскольку это ситуация родитель-потомок, вы можете просто излучать и транслировать в области видимости.   -  person Marcus Höglund    schedule 17.08.2017
comment
@Milban Вы пытались использовать $parent для доступа к родительской области?   -  person JeanJacques    schedule 17.08.2017
comment
Каким-то образом я вынужден использовать метод привязки данных, поэтому я не проверял другой способ.   -  person GeoCom    schedule 17.08.2017
comment
Не могли бы вы попробовать создать плункер, чтобы нам было легче вам помочь?   -  person JeanJacques    schedule 17.08.2017
comment
@MarcusH, да, согласен, нам не нужно использовать здесь $rootscope, для этого достаточно области видимости.   -  person sivaram636    schedule 17.08.2017
comment
Я только что добавил плунжер   -  person GeoCom    schedule 17.08.2017


Ответы (1)


В вашем плункере, сделав это:

<test-component value="vm.obj"> </test-component>

Вы помещаете значение obj в переменную value. Таким образом, в дочерней области вы можете получить доступ к этому значению с помощью var value, а не с obj.

Вот ваш плункер обновлен.

person JeanJacques    schedule 17.08.2017
comment
Спасибо, как я могу присвоить значение в контроллере компонента, потому что, когда я его присваиваю, он перестает работать. бывший. ctrl.testObj = ctrl.value.a plnkr.co/edit/0kvexzKZKaHZ6PlUGaNk?p=preview - person GeoCom; 17.08.2017
comment
Это потому, что когда вы пытаетесь присвоить ctrl.value.a ctrl.testObj, ctrl.value все еще не установлено в дочерней области, поэтому value не определено. Вы можете добавить тайм-аут к вашему назначению, но, вероятно, есть правильное решение - person JeanJacques; 17.08.2017
comment
@Milban Хорошо, я думаю, я нашел, как этого добиться. Вы можете использовать $onInit для назначения ctrl.value.a ctrl.testObj. Вот ваш плункер обновлен. - person JeanJacques; 17.08.2017
comment
Спасибо, вы сэкономили мое время, вы также можете посмотреть этот вопрос stackoverflow.com/questions/45593764/ - person GeoCom; 17.08.2017