2016-12-15 102 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调用。

相关问题