一些小疑问
来源:16-6 Vue.extend进阶用法

GoBig_or_GoHome
2019-11-17
chapter3-3 component 标题处写成了 compnent 源码和文档都是
chapter3-5
- Vue.extend({},name) 第二个参数有处理组件名称吗? 我查看了以下源码好像没有
将name放入到第一个对象参数中 - id=‘loading-wrapper’有点混淆
使用其他id名称区分 - return ()=>{ } 这里也可以稍微提一下 听课时有点懵逼这个位置
分享一下我补充的注释
function Loading(msg) {
// 1 创建 加载组件构造函数 根据id 有了定义的样式
const LoadingComponent = Vue.extend({
template: '<div id="loading-wrapper">{{msg}}</div>',
name: 'LoadingComponent',
props: {
msg: {
type: String,
// msg为传入的参数
default: msg
}
}
// 第二个字符串参数 是无效的?
}, 'LoadingComponent')
// 2 创建 div 作为挂载组件的节点
const div = document.createElement('div')
div.setAttribute('id', 'mount-here')
document.body.append(div)
// 将实例化的组件 挂载到 创建的div上; id=mount-here 只是用于定位挂载
// 实例化的组件结构 将完全取代 原div结构
new LoadingComponent().$mount('#mount-here')
// 3 返回箭头函数 需要 Loading(msg)() 才会执行 需再调用一次
return () => {
document.body.removeChild(document.getElementById('loading-wrapper'))
}
}
// 挂载到Vue原型上 作为全局函数 $开头
Vue.prototype.$loading = Loading
new Vue({
el: '#root',
methods: {
showLoading() {
// 3 此处 hide 还不会执行 return后箭头函数
// 相当于执行Loading('正在加载,请稍等...')
const hide = this.$loading('正在加载,请稍等...')
setTimeout(() => {
// 3 此处 hide() 会执行 return后箭头函数
// 相当于执行Loading('正在加载,请稍等...')();
hide()
}, 2000)
}
}
})
写回答
1回答
-
你好,感谢你发现问题和热心提问,学习得非常细致!
错别字问题已经解决
第一个问题,Vue.extend 只有一个参数 extendOptions,name 获取源码如下:
var name = extendOptions.name || Super.options.name;
这里的 Super = this,即 Vue 实例,也就说 name 是从 Vue 实例中的 name 和 extendOptions 中获取的
第二个问题,感谢提议
第三个问题,解释得很详细,手动点赞
012019-11-18
相似问题