2016-12-15 197 views
0

我有一個Aurelia項目,使用MVC服務器端路由。我使用一個指向主「應用程序」組件的佈局文件,像這樣:如何在服務器端路由中使用Aurelia路由器

<div aurelia-app="main" start="app" data-model='@Json.Encode(Model)'></div> 

我的每個視圖包含這樣的佈局文件和一些參考:

<div aurelia-app="main" start="sample-module" data-model='@Json.Encode(Model)'></div> 

我main.js配置是這樣的:

export function configure(aurelia) { 
    aurelia.use.standardConfiguration() 

    aurelia.container.registerInstance('viewModel', 
     Object.assign({}, JSON.parse(aurelia.host.dataset.model))); 

    aurelia.start().then(a => { 
     let start = a.host.attributes.start.value; 
     a.setRoot(start); 
    }); 
} 

而且我利用Aurelia路上的路由器(在app.js)是這樣的:

export class App { 
    constructor() { 
    } 
    configureRouter(config, router) { 

     config.title = 'Aurelia'; 

     config.options.pushState = true; 
     config.options.root = '/'; 

     config.map([ 
      { route: ['', 'Aurelia/Home'],  name: 'home',   moduleId: 'home',    title: 'home',   nav: false }, 
      { route: 'Aurelia/SampleModule', name: 'sample module', moduleId: 'sample-module',  title: 'sample module', nav: true }, 
     ]); 
     this.router = router; 
    } 
} 

差不多的作品。如果我使用Aurelia導航鏈接導航到SampleModule,它會加載模塊但不會觸及服務器 - 甚至不會觸及視圖。如果我手動導航到Aurelia/SampleModule,它會加載sample-module兩次,包括來自服務器的數據。 Aurelia路由器完全按照我的預期更新網址,因此如果我瀏覽然後點擊刷新,它會正確加載服務器。

我希望能夠使用導航來更改視圖而不刷新整個頁面,但仍然利用我的服務器端路由並擊中視圖和控制器。

回答

1

我能夠從每個視圖去除參考應用解決我的問題:

<div aurelia-app="main" start="sample-module" data-model='@Json.Encode(Model)'></div> 

以及去除佈局文件和main.jsstart邏輯,所以現在我main.js長相是這樣的:

export function configure(aurelia) { 
    aurelia.use.standardConfiguration() 

    aurelia.container.registerInstance('viewModel', 
     Object.assign({}, JSON.parse(aurelia.host.dataset.model))); 

    aurelia.start().then(() => aurelia.setRoot()); 
} 

在後端,該機型具有獨特的屬性,每一頁:

public class AppViewModel 
{ 
    public HomeViewModel Home { get; set; } 
    public SampleModuleViewModel SampleModule { get; set; } 
} 

從視圖模型(即, sample-module.js),它檢查相關屬性(AppViewModel.SampleModule)是否被填充,如果沒有,它會進行ajax調用。

相關問題