2017-02-15 39 views
0

我正在使用Mithril.js將我的個人網站/博客創建爲單頁應用程序。我網站上的所有頁面和博客文章均使用PagePost組件呈現,並且基於URL中的:slug加載正確的頁面。Mithril組件在路由更改時未更新

我的問題是每當我嘗試切換頁面時,頁面的內容都不會更新。在頁面和帖子之間切換的原因是因爲我在PagePost組件之間交替。但是當我嘗試連續兩次使用相同的組件時,從頁面到頁面,它不會更新網頁。

m.route(document.body, '/', { 
    // `Home` is a wrapper around `Page` 
    // so I can route to `/` instead of `/home` 
    '/': Home, 
    '/:slug': Page, 
    '/blog/:slug': Post 
}); 
const Home = { 
    view() { 
    return m(Page, { slug: 'home' }); 
    } 
}; 

這裏是Page成分(Post組分是非常相似的)。這兩個組件都正確呈現

const Page = { 
    content: {}, 
    oninit(vnode) { 
    m.request({ 
     method: 'GET', 
     url: 'content.json', 
    }).then((response) => { 
     Page.content = response.pages[vnode.attrs.slug]; 
    }); 
    }, 
    view() { 
    if (Page.content) { 
     return [ 
     m('#content', m.trust(Page.content.body)) 
     ]; 
    } 
    } 
}; 

爲什麼米索里爾沒有意識到slu changed變了?

回答

0

docs page for m.route爲您提供解決方案。

當用戶從一個參數化的路線導航到相同的路線具有不同的參數(例如,從/page/1去給定的路線/page/:id/page/2,該組件將不會被從頭重新因爲兩個路由解析爲相同的部件,從而導致虛擬的就地差異,這會產生觸發onupdate hook的副作用,而不是oninit/oncreate。但是,開發人員想要將組件的重新創建同步到路線變更事件

+1

謝謝!我只是c絞死':slug'到':key',現在它工作! :) – evanrelf

相關問題