【发布时间】:2014-12-09 14:17:29
【问题描述】:
如何将组件事件限制为它的父/子组件并防止冒泡。
我有以下两个组件:
ParentComponent.dart
@Component(
selector: "parent-component",
template: '<div>parent value: {{value}}<content></content></div>',
useShadowDom: false
)
class ParentComponent implements ScopeAware{
Scope _scope;
@NgAttr('value')
String value;
void set scope(Scope scope){
_scope = scope;
_scope.on('select-child').listen((ScopeEvent event){
value = event.data['value'];
});
}
}
ChildComponent.dart
@Component(
selector: "child-component",
template: '<div ng-click="select()">child: {{value}}</div>',
useShadowDom: false
)
class ChildComponent implements ScopeAware{
Scope _scope;
@NgAttr('value')
String value;
void select(){
_scope.parentScope.broadcast('select-child', {
'value': value
});
}
void set scope(Scope scope){
_scope = scope;
}
}
当单击子组件时,父组件会更新其值。
但是当我有更多的父组件时,它们都会听相同的子组件:
<!-- Parent 1 -->
<parent-component>
<child-component value="foo"></child-component>
<child-component value="bar"></child-component>
</parent-component>
<!-- Parent 2 -->
<parent-component>
<child-component value="herp"></child-component>
<child-component value="derp"></child-component>
</parent-component>
当我单击 parent1 的 foo 子组件时,两个父组件都将其值更改为 'foo'。
我已经尝试过使用发射、广播。我知道向下广播气泡到叶节点并向上发射气泡。我也尝试过使用“scope.createChild()”,但我想我错过了一些东西。
如何在父级中创建仅对子级可见的范围,反之亦然? 或者如何正确使用广播发射?
当我正确理解文档时,我必须在子组件中使用 emit() 而不是 parentNode.broadcast() 但我无法让它工作
【问题讨论】:
标签: scope dart components angular-dart