2017-02-15 15 views
0

Я создаю свой персональный сайт/блог как одностраничное приложение, используя Mithril.js. Все страницы и сообщения в блоге на моем сайте отображаются с использованием компонентов Page и Post, а правильная страница загружается на основе :slug в URL-адресе.Мифриловый компонент, не обновляющийся при изменении маршрута

Проблема у меня в том, что всякий раз, когда я пытаюсь переключаться между страницами, содержимое страницы не обновляется. Переключение между страниц и сообщений работает, потому что я чередую между Page и Post компонентами. Но когда я пытаюсь использовать один и тот же компонент дважды подряд, переходя от на страницу, он не обновляет веб-страницу.

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)) 
     ]; 
    } 
    } 
}; 

Почему Мифрил не признает, что слизняк изменился?

ответ

0

У docs page for m.route есть решение.

Когда пользователь переходит от параметризованного пути к тому же маршруту с другим параметром (например, переходом от /page/1 к /page/2 данному маршруту /page/:id компонент не будет воссоздан с нуля, так как оба путями разрешения к одному компоненте , и, таким образом, приводит к виртуальному внутреннему разлому. Это имеет побочный эффект от запуска крюка onupdate, а не oninit/oncreate.Однако разработчик относительно часто хочет синхронизировать воссоздание компонента с событие изменения маршрута

+1

Спасибо, я просто c повесил ': slug' на': key', и теперь он работает! :) – evanrelf

 Смежные вопросы

  • Нет связанных вопросов^_^