Наша команда создала плагин, который добавляет миксин beforeCreate. Этот миксин добавляет вычисляемое свойство к экземпляру компонента. Он отлично работает в одном проекте, но в другом проекте this.$options.computed
не определено. Оба работают на 2.6.11, и компонент на самом деле является еще одним плагином для tempate, так что это точно такой же код компонента. Я не могу понять, почему computed
будет определено в одном проекте, но не в другом или для любого экземпляра vue.
function plugin (Vue, options = {}) {
Vue.mixin({
beforeCreate () {
...
this.$options.computed[computedName] = computedFns(name)
// above line throws cannot set value to undefined
...
}
function computedFns (name) {
return {
get () {
return this[name] === undefined ? this.$data[DATA_PREFIX + name] : this[name]
},
set (value) {
if (this[name] === undefined) {
this.$data[DATA_PREFIX + name] = value
}
this.$emit(`update:${name}`, value)
}
}
}
Для ударов и хихиканья я перечислил все свойства this.$options
, как указано в mixin, и, конечно же, вычисленное отсутствует при использовании во втором проекте:
::::: parent
::::: _parentVnode
::::: propsData
::::: _parentListeners
::::: _renderChildren
::::: _componentTag
::::: components
::::: directives
::::: filters
::::: _base
::::: beforeCreate
::::: destroyed
::::: props
::::: data
::::: watch
::::: mounted
::::: methods
::::: render
::::: staticRenderFns
::::: _compiled
::::: _scopeId
::::: _ssrRegister
::::: __file
::::: name
::::: _Ctor
Но оно есть в первом проекте:
::::: parent
::::: _parentVnode
::::: propsData
::::: _parentListeners
::::: _renderChildren
::::: _componentTag
::::: components
::::: directives
::::: filters
::::: _base
::::: beforeCreate
::::: destroyed
::::: data
::::: computed
::::: created
::::: props
::::: watch
::::: mounted
::::: methods
::::: render
::::: staticRenderFns
::::: _compiled
::::: _scopeId
::::: _ssrRegister
::::: __file
::::: name
::::: _Ctor