2016-06-17 58 views
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數組。現在我想傳遞給sectionssite-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,只是讓組件互相交談;-)

我該怎麼辦?

回答

0

你可以把變量觀察將要執行,只要變量的值,例如改變

,如果你的變量是$ scope.newVar

,那麼你可以把觀察家它

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

我不'想要使用'$ scope',這不是ng1.5中的最佳做法 –