в новом проекте, над которым я работаю, я начал использовать компоненты вместо директив.
однако я столкнулся с проблемой, когда не могу найти конкретный стандартный способ сделать это.
Легко уведомить о событии от дочернего к родительскому, вы можете найти его в моем plunkr ниже, но как правильно уведомить о событии от родителя к дочернему?
Angular2, кажется, решает эту проблему, используя что-то вроде этого: " rel="noreferrer">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 выше