в новом проекте, над которым я работаю, я начал использовать компоненты вместо директив.
однако я столкнулся с проблемой, когда я не могу найти конкретный стандартный способ сделать это.
Легко уведомить событие от дочернего к родительскому, вы можете найти его на моем plunkr ниже, но какой правильный способ уведомить событие от родителя к ребенку?
Angular2, похоже, решает эту проблему, используя что-то вроде этого: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-local-var Но я не вижу возможности определить "указатель" на дочерний компонент, как в примере С#timer
Чтобы упростить преобразование в Angular2, я хочу избежать:
- событие, излучающее (излучение и трансляция из областей)
- используя требование от дочернего элемента (а затем добавить обратный вызов к родительскому объекту.).
- используя одностороннюю привязку, впрыскивая область в дочернем элементе, а затем "наблюдайте" это свойство. БОЛЬШЕ UGLY
Пример кода:
var app = angular.module('plunker', []);
app.controller('RootController', function() {
});
app.component('parentComponent', {
template: `
<h3>Parent component</h3>
<a class="btn btn-default btn-sm" ng-click="$ctrl.click()">Notify Child</a>
<span data-ng-bind="$ctrl.childMessage"></span>
<child-component on-change="$ctrl.notifiedFromChild(count)"></child-component>
`,
controller: function() {
var ctrl = this;
ctrl.notifiedFromChild = function(count){
ctrl.childMessage = "From child " + count;
}
ctrl.click = function(){
}
},
bindings: {
}
});
app.component('childComponent', {
template: `
<h4>Child component</h4>
<a class="btn btn-default btn-sm" ng-click="$ctrl.click()">Notify Parent</a>
`,
controller: function() {
var ctrl = this;
ctrl.counter = 0;
ctrl.click = function(){
ctrl.onChange({ count: ++ctrl.counter });
}
},
bindings: {
onChange: '&'
}
});
Здесь вы можете найти пример:
http://plnkr.co/edit/SCK8XlYoYCRceCP7q2Rn?p=preview
Это возможное решение, которое я создал
http://plnkr.co/edit/OfANmt4zLyPG2SZyVNLr?p=preview
где дочерний элемент требует родителя, а затем дочерний элемент устанавливает родительскую ссылку на дочерний объект... теперь родитель может использовать дочерний элемент... уродливый, но он как пример Angular2 выше