2016-06-17 5 views
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を省略して、何らかの形でコンポーネントが何らかの形で話をしてくれることを願っています。

どうすればよいですか?

答えて

0

あなたの変数は$ scope.newVar

であれば、変数の値は、例えば

を変更するたびに、あなたがそれに

$scope.$watch('newVar',function(newval,oldval){ 
//your code goes here 
}) 
+0

をウォッチャーを置くことができます実行されます、その変数に時計を置くことができます私は '$ scope'を使いたくないのですが、これはng1.5ではベストプラクティスではありません –

関連する問題