在我正在处理的新项目中,我已经开始使用组件而不是指令。
但是,我遇到了一个问题,我找不到具体的标准方法来做到这一点。
将事件从孩子通知给父母很容易,您可以在下面的我的 plunkr 上找到它,但是将事件从父母通知给孩子的正确方法是什么?
Angular2 似乎通过使用这样的东西来解决这个问题:https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child-local-var 但我没有tink 可以定义一个指向子组件的“指针”,就像示例中使用#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示例