动态组件 & 异步组件
# 动态组件 & 异步组件
// 动态组件 & 异步组件
Vue.component('async-example', function (resolve, reject) {
setTimeout(function () {
// 向 `resolve` 回调传递组件定义
resolve({
template: '<div>I am async!</div>'
})
}, 1000)
})
// 将异步组件和webpack的code-splitting功能配合使用
Vue.component('async-webpack-example', function(resolve) {
// require语法将会告诉webpack
// 自动将你的构建代码切割成多个包,这些包
// 会通过ajax请求加载
require(['./my-async-component'], resolve)
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// webpack 2 和 ES2015 语法加在一起
Vue.component(
'async-webpack-example',
// 这个动态导入会返回一个'Promise'对象
() => import('./my-async-component')
)
// 当使用局部注册时,也可以直接提供一个返回Promise函数
new Vue({
// ...
components: {
'my-component': () => import('./my-async-component')
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
// 处理加载状态
// 异步组件工厂函数也可以返回一个如下格式的对象:
const AsyncComponent = () => ({
// 需要加载的组件
component: import('./MyComponent.vue),
// 异步组件加载时使用的组件
loading: LoadingComponent,
// 加载失败时使用的组件
error: ErrorComponent,
// 展示加载组件的延时时间。默认值是200(毫秒)
// delay: 200,
// 如果提供了超过时间且组件加载也超时了,
// 则使用加载失败时使用的组件。默认值是:infinity
timeout: 3000
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16