0
我建立與組件的網站導航,是這樣的:角 - notyfing上改變
<site-wrapper>
<site-header>
<site-menu />
</site-header>
<site-section />
<site-section />
</site-wrapper>
而現在,我的site-wrapper
是這樣的:
class siteWrapperController {
$onInit() {
this.sections = [];
}
addSection(section) {
if (this.sections.indexOf(section) === -1) {
this.sections.push(section);
}
}
}
app.component('siteWrapper', {
controller: siteWrapperController,
template,
transclude: true
});
和我site-section
:
class siteSectionController {
$onInit() {
const id = this.sectionId;
const title = this.sectionTitle;
this.o = { id, title };
this.wrap.addSection(this.o);
}
}
app.component('siteSection', {
template,
transclude: true,
controller: siteSectionController,
bindings: {
sectionTitle: '@',
sectionId: '@'
},
require: {
wrap: '^siteWrapper'
}
});
我基本上是在這裏做的,我註冊在它的包裝中的每個部分sections
數組。現在我想傳遞給sections
site-menu
:
class siteMenuController {
$onInit() {
this.buildSections(this.wrap.sections);
}
buildSections(sections) {
Array.prototype.forEach.call(sections, s => {
console.log(s);
});
}
}
app.component('siteMenu', {
controller: siteMenuController,
bindings: {
items: '<',
className: '@'
},
template: template,
transclude: true,
require: {
wrap: '^siteWrapper'
}
});
不幸的是,它返回空。這意味着,這運行得太早。我可以在那裏拋出setTimeout
並完成,但我相信有一個更好的方法。我希望省略$scope
和$broadcast/$emit
,只是讓組件互相交談;-)
我該怎麼辦?
我不'想要使用'$ scope',這不是ng1.5中的最佳做法 –