我尋找到了我們公司的JSF門戶的新前端框架,並正在考慮Angular2。我想逐步將頁面上的特定組件從JSF遷移到Angular2/REST。我不想用Angular2路由,至少目前還沒有,我不想角完全接管頁:某些組件將仍然需要JSF可預見的未來。整合Angular2到現有JSF項目
理想情況下,我會用我的Angular根組件包裝我的JSF模板正文的內容,並將JSF呈現的HTML投影到根組件中,以便JSF的工作方式與之前一樣,並且模板中的任何Angular組件被拿起並且都可以交流。例如:
<h:body>
<my-app>
<h:panelGroup styleClass="languageSwitcher">
<h:form>
<h:selectOneMenu value="#{languageHandler.language}" onchange="submit()">
<f:selectItem itemValue="en" itemLabel="English" />
<f:selectItem itemValue="nl" itemLabel="Dutch" />
</h:selectOneMenu>
</h:form>
</h:panelGroup>
<my-angular-component data-source="/rest/mydata"></my-angular-component>
</my-app>
<h:body>
隨着Angular 1,我會使用transclusion來完成這項工作。不過,據我所知,Angular 2 content projection does not work on the root component,因爲呈現的HTML不被視爲一個角度編譯視圖。
我也考慮過使用根組件的templateURL
動態獲得JSF呈現的頁面,但是這是很難實現,並且不與衆多POST的是JSF確實打得很好。
我認爲完成這項工作的唯一方法是爲每個Angular組件創建一個根組件,以替換一些JSF,並在每個頁面上引導所有使用的組件。這裏的缺點是我需要很多樣板代碼來引導我構建的每個Angular組件,並且它們沒有共享根組件,因此它們之間的通信受到限制。此外,我需要通過配置屬性各角度成分,但由於這些aren't picked up automatically either我需要自定義代碼添加到每個組件來接他們:
class MyAngularComponent {
constructor(public elementRef: ElementRef) {
this.dataSourceUrl = this.elementRef.nativeElement.getAttribute("data-source");
}
}
後來,當我終於與更換整個前端Angular,我必須再次重構每個組件,以便使用@Input
而不是手動從屬性中檢索信息。
有誰知道一個更好的方式來做到這一點?或者JSF和Angular2混合不好?
*「或者JSF和Angular2不能很好地混合?」*如果這是真的,那麼http://angularfaces.com永遠不會存在。 – BalusC
AFAIK angularfaces使用AngularJS(又名Angular 1),它支持跨平臺,極大地簡化了過程。 –
如果Angular 1適合您的需求,爲什麼使用2? – JMK