0
にnotyfing、それはこのようなものだ:角度Iは、コンポーネントとサイトナビゲーションを構築しています変更
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
:
<site-wrapper>
<site-header>
<site-menu />
</site-header>
<site-section />
<site-section />
</site-wrapper>
そして今、私のsite-wrapper
はこのようなものです
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
アレイ。今、私はsite-menu
にそのsections
を渡したい:
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ではベストプラクティスではありません –