看开源项目的时候看到这样的用法:
发现与之前定义组件的方式不一样,这个resolve又是什么?
原来这个是vue的异步组件实现,可以看这里:《异步组件》
异步组件的需求:
在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载。, Vue.js 允许将组件定义为一个工厂函数,动态地解析组件的定义。Vue.js 只在组件需要渲染时触发工厂函数,并且把结果缓存起来,用于后面的再次渲染。例如:
Vue.component('async-example', function (resolve, reject) { setTimeout(function () { // Pass the component definition to the resolve callback resolve({ template: '<div>I am async!</div>' }) }, 1000) })
工厂函数接收一个 resolve
回调,在收到从服务器下载的组件定义时调用。也可以调用 reject(reason)
指示加载失败。这里 setTimeout
只是为了演示。怎么获取组件完全由你决定。推荐配合使用 :Webpack 的代码分割功能:
Vue.component('async-webpack-example', function (resolve) { // 这个特殊的 require 语法告诉 webpack // 自动将编译后的代码分割成不同的块, // 这些块将通过 Ajax 请求自动下载。 require(['./my-async-component'], resolve) })
你可以使用 Webpack 2 + ES2015 的语法返回一个 Promise
resolve 函数:
Vue.component( 'async-webpack-example', () => import('./my-async-component') )