|
|
@@ -10,7 +10,6 @@ import {
|
|
|
warn,
|
|
|
query,
|
|
|
hasOwn,
|
|
|
- set,
|
|
|
isReserved,
|
|
|
bind
|
|
|
} from '../../util/index'
|
|
|
@@ -76,41 +75,35 @@ export default function (Vue) {
|
|
|
*/
|
|
|
|
|
|
Vue.prototype._initData = function () {
|
|
|
- var propsData = this._data
|
|
|
- var optionsDataFn = this.$options.data
|
|
|
- var optionsData = optionsDataFn && optionsDataFn()
|
|
|
- var runtimeData
|
|
|
- if (process.env.NODE_ENV !== 'production') {
|
|
|
- runtimeData = (typeof this._runtimeData === 'function'
|
|
|
+ var dataFn = this.$options.data
|
|
|
+ var data = this._data = dataFn ? dataFn() : {}
|
|
|
+ var props = this._props
|
|
|
+ var runtimeData = this._runtimeData
|
|
|
+ ? typeof this._runtimeData === 'function'
|
|
|
? this._runtimeData()
|
|
|
- : this._runtimeData) || {}
|
|
|
- this._runtimeData = null
|
|
|
- }
|
|
|
- if (optionsData) {
|
|
|
- this._data = optionsData
|
|
|
- for (var prop in propsData) {
|
|
|
- if (process.env.NODE_ENV !== 'production' &&
|
|
|
- hasOwn(optionsData, prop) &&
|
|
|
- !hasOwn(runtimeData, prop)) {
|
|
|
- warn(
|
|
|
- 'Data field "' + prop + '" is already defined ' +
|
|
|
- 'as a prop. Use prop default value instead.'
|
|
|
- )
|
|
|
- }
|
|
|
- if (this._props[prop].raw !== null ||
|
|
|
- !hasOwn(optionsData, prop)) {
|
|
|
- set(optionsData, prop, propsData[prop])
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- var data = this._data
|
|
|
+ : this._runtimeData
|
|
|
+ : null
|
|
|
// proxy data on instance
|
|
|
var keys = Object.keys(data)
|
|
|
var i, key
|
|
|
i = keys.length
|
|
|
while (i--) {
|
|
|
key = keys[i]
|
|
|
- this._proxy(key)
|
|
|
+ // there are two scenarios where we can proxy a data key:
|
|
|
+ // 1. it's not already defined as a prop
|
|
|
+ // 2. it's provided via a instantiation option AND there are no
|
|
|
+ // template prop present
|
|
|
+ if (
|
|
|
+ !props || !hasOwn(props, key) ||
|
|
|
+ (runtimeData && hasOwn(runtimeData, key) && props[key].raw === null)
|
|
|
+ ) {
|
|
|
+ this._proxy(key)
|
|
|
+ } else if (process.env.NODE_ENV !== 'production') {
|
|
|
+ warn(
|
|
|
+ 'Data field "' + key + '" is already defined ' +
|
|
|
+ 'as a prop. Use prop default value instead.'
|
|
|
+ )
|
|
|
+ }
|
|
|
}
|
|
|
// observe data
|
|
|
observe(data, this)
|