2017-01-22 57 views
2

愉快的夜晚!在我的Aurelia-App中,我使用viewModel通过navigationStrategy处理各种视图(读取路径参数并相应地设置视图)。Aurelia在导航时不'刷新'vm

导航的运作baiscally好,然而有一个问题:

当我一直是基于同一个视图模型之间的路线导航,视图模型不“刷新”。只有在首先导航到具有不同viewModel的不同路线,然后返回到预定路线时,才会按预期显示内容。

看起来组件的生命周期钩子没有踢入。有什么办法可以手动触发unbind()和detached()吗?还是有更好的方式来做一般的事情?

此外路由配置似乎有点奇怪。当我拿走moduleId时,应用程序崩溃,当我拿走layoutViewModel时,数据未绑定到视图。我现在的解决方法是分配一个空的viewModel +一个空模板。我使用这个错误吗?

非常感谢!

configureRouter(config, Router) { 

    var getModelStrat = (instruction) => { 
    instruction.config.layoutView = "pages/templates/"+instruction.params.model+".html" 
    } 

    config.addAuthorizeStep(AuthorizeStep); 
    config.title = 'Aurelia'; 
    config.map([ 
    { 
     route: 'detail/:model/:id?', 
     name: 'detail', 
     moduleId: 'pages/empty', 
     layoutViewModel: 'pages/detail', 
     auth: true, 
     navigationStrategy: getModelStrat 
    }, 
    {...} 
    ]); 
} 

回答

4

这是设计。路由器将尝试重用现有的视图模型。

如果你需要为每个视图模型忽略这一点,那么就可以创建determineActivationStrategy()方法并返回activationStrategy.replace

import { activationStrategy } from 'aurelia-router'; 

export class SomeViewModel { 
    // ... 

    determineActivationStrategy() { 
     return activationStrategy.replace; 
    } 

    // ...   
} 

如果你需要重写此为每个视图模型/路由再看看Marton Sagi's answer为一个类似的问题。基本上,你所有的路线都需要定义activationStrategy: 'replace'