使用VueJS加载动态组件和模板

时间:2014-09-29 06:12:37

标签: javascript mvvm vue.js

我考虑将VueJS用于多页网站。在routing的官方示例中,它们表明您可以根据URL动态更改模板和组件,但它们仍然将所有HTML模板和JS组件放在一个文件中,一次性加载

我的网站会非常庞大​​,我只想在需要时加载所有内容。所以我的问题是:如何在更改URL时异步加载这些HTML模板和JS组件按需如果只显示上述路由示例将会有所帮助可以修改动态脚本加载。

2 个答案:

答案 0 :(得分:9)

更新:请参阅官方文档中的Async Components部分。

答案 1 :(得分:3)

硬编码,但工作。对于像我这样的初学者来说,Webpack解决方案太难了。

var router = new VueRouter({hashbang:false})
var routerMap = {};

router.beforeEach( function (transition) {
    var path = transition.to.path;
    if ((path != '/') && !(path in routerMap)) {
        _ajax('/reports/'+ path + '.html', function(res){//$.ajax replacement (async)
            routerMap[path] = {
                component: {
                    template: res 
                }
            }; 
            router.on(path, routerMap[path]);   //associate dynamically loaded component            

            transition.abort();     //abort current
            router.stop();                          
            router.start();         //restart router
            router.go(path);        //init new transition to the same path
        });//_ajax 
  } else 
        transition.next();          //default action for already loaded content
});