2017-01-22 55 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'