nav tabs on admin dashboard
This commit is contained in:
53
node_modules/vue/src/core/instance/events.js
generated
vendored
53
node_modules/vue/src/core/instance/events.js
generated
vendored
@@ -4,8 +4,8 @@ import {
|
||||
tip,
|
||||
toArray,
|
||||
hyphenate,
|
||||
handleError,
|
||||
formatComponentName
|
||||
formatComponentName,
|
||||
invokeWithErrorHandling
|
||||
} from '../util/index'
|
||||
import { updateListeners } from '../vdom/helpers/index'
|
||||
|
||||
@@ -21,25 +21,31 @@ export function initEvents (vm: Component) {
|
||||
|
||||
let target: any
|
||||
|
||||
function add (event, fn, once) {
|
||||
if (once) {
|
||||
target.$once(event, fn)
|
||||
} else {
|
||||
target.$on(event, fn)
|
||||
}
|
||||
function add (event, fn) {
|
||||
target.$on(event, fn)
|
||||
}
|
||||
|
||||
function remove (event, fn) {
|
||||
target.$off(event, fn)
|
||||
}
|
||||
|
||||
function createOnceHandler (event, fn) {
|
||||
const _target = target
|
||||
return function onceHandler () {
|
||||
const res = fn.apply(null, arguments)
|
||||
if (res !== null) {
|
||||
_target.$off(event, onceHandler)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function updateComponentListeners (
|
||||
vm: Component,
|
||||
listeners: Object,
|
||||
oldListeners: ?Object
|
||||
) {
|
||||
target = vm
|
||||
updateListeners(listeners, oldListeners || {}, add, remove, vm)
|
||||
updateListeners(listeners, oldListeners || {}, add, remove, createOnceHandler, vm)
|
||||
target = undefined
|
||||
}
|
||||
|
||||
@@ -49,7 +55,7 @@ export function eventsMixin (Vue: Class<Component>) {
|
||||
const vm: Component = this
|
||||
if (Array.isArray(event)) {
|
||||
for (let i = 0, l = event.length; i < l; i++) {
|
||||
this.$on(event[i], fn)
|
||||
vm.$on(event[i], fn)
|
||||
}
|
||||
} else {
|
||||
(vm._events[event] || (vm._events[event] = [])).push(fn)
|
||||
@@ -83,7 +89,7 @@ export function eventsMixin (Vue: Class<Component>) {
|
||||
// array of events
|
||||
if (Array.isArray(event)) {
|
||||
for (let i = 0, l = event.length; i < l; i++) {
|
||||
this.$off(event[i], fn)
|
||||
vm.$off(event[i], fn)
|
||||
}
|
||||
return vm
|
||||
}
|
||||
@@ -96,16 +102,14 @@ export function eventsMixin (Vue: Class<Component>) {
|
||||
vm._events[event] = null
|
||||
return vm
|
||||
}
|
||||
if (fn) {
|
||||
// specific handler
|
||||
let cb
|
||||
let i = cbs.length
|
||||
while (i--) {
|
||||
cb = cbs[i]
|
||||
if (cb === fn || cb.fn === fn) {
|
||||
cbs.splice(i, 1)
|
||||
break
|
||||
}
|
||||
// specific handler
|
||||
let cb
|
||||
let i = cbs.length
|
||||
while (i--) {
|
||||
cb = cbs[i]
|
||||
if (cb === fn || cb.fn === fn) {
|
||||
cbs.splice(i, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
return vm
|
||||
@@ -129,12 +133,9 @@ export function eventsMixin (Vue: Class<Component>) {
|
||||
if (cbs) {
|
||||
cbs = cbs.length > 1 ? toArray(cbs) : cbs
|
||||
const args = toArray(arguments, 1)
|
||||
const info = `event handler for "${event}"`
|
||||
for (let i = 0, l = cbs.length; i < l; i++) {
|
||||
try {
|
||||
cbs[i].apply(vm, args)
|
||||
} catch (e) {
|
||||
handleError(e, vm, `event handler for "${event}"`)
|
||||
}
|
||||
invokeWithErrorHandling(cbs[i], vm, args, vm, info)
|
||||
}
|
||||
}
|
||||
return vm
|
||||
|
||||
24
node_modules/vue/src/core/instance/init.js
generated
vendored
24
node_modules/vue/src/core/instance/init.js
generated
vendored
@@ -77,8 +77,6 @@ export function initInternalComponent (vm: Component, options: InternalComponent
|
||||
const parentVnode = options._parentVnode
|
||||
opts.parent = options.parent
|
||||
opts._parentVnode = parentVnode
|
||||
opts._parentElm = options._parentElm
|
||||
opts._refElm = options._refElm
|
||||
|
||||
const vnodeComponentOptions = parentVnode.componentOptions
|
||||
opts.propsData = vnodeComponentOptions.propsData
|
||||
@@ -119,32 +117,12 @@ export function resolveConstructorOptions (Ctor: Class<Component>) {
|
||||
function resolveModifiedOptions (Ctor: Class<Component>): ?Object {
|
||||
let modified
|
||||
const latest = Ctor.options
|
||||
const extended = Ctor.extendOptions
|
||||
const sealed = Ctor.sealedOptions
|
||||
for (const key in latest) {
|
||||
if (latest[key] !== sealed[key]) {
|
||||
if (!modified) modified = {}
|
||||
modified[key] = dedupe(latest[key], extended[key], sealed[key])
|
||||
modified[key] = latest[key]
|
||||
}
|
||||
}
|
||||
return modified
|
||||
}
|
||||
|
||||
function dedupe (latest, extended, sealed) {
|
||||
// compare latest and sealed to ensure lifecycle hooks won't be duplicated
|
||||
// between merges
|
||||
if (Array.isArray(latest)) {
|
||||
const res = []
|
||||
sealed = Array.isArray(sealed) ? sealed : [sealed]
|
||||
extended = Array.isArray(extended) ? extended : [extended]
|
||||
for (let i = 0; i < latest.length; i++) {
|
||||
// push original options and not sealed options to exclude duplicated options
|
||||
if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {
|
||||
res.push(latest[i])
|
||||
}
|
||||
}
|
||||
return res
|
||||
} else {
|
||||
return latest
|
||||
}
|
||||
}
|
||||
|
||||
7
node_modules/vue/src/core/instance/inject.js
generated
vendored
7
node_modules/vue/src/core/instance/inject.js
generated
vendored
@@ -41,14 +41,13 @@ export function resolveInject (inject: any, vm: Component): ?Object {
|
||||
// inject is :any because flow is not smart enough to figure out cached
|
||||
const result = Object.create(null)
|
||||
const keys = hasSymbol
|
||||
? Reflect.ownKeys(inject).filter(key => {
|
||||
/* istanbul ignore next */
|
||||
return Object.getOwnPropertyDescriptor(inject, key).enumerable
|
||||
})
|
||||
? Reflect.ownKeys(inject)
|
||||
: Object.keys(inject)
|
||||
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
const key = keys[i]
|
||||
// #6574 in case the inject object is observed...
|
||||
if (key === '__ob__') continue
|
||||
const provideKey = inject[key].from
|
||||
let source = vm
|
||||
while (source) {
|
||||
|
||||
68
node_modules/vue/src/core/instance/lifecycle.js
generated
vendored
68
node_modules/vue/src/core/instance/lifecycle.js
generated
vendored
@@ -13,14 +13,22 @@ import {
|
||||
warn,
|
||||
noop,
|
||||
remove,
|
||||
handleError,
|
||||
emptyObject,
|
||||
validateProp
|
||||
validateProp,
|
||||
invokeWithErrorHandling
|
||||
} from '../util/index'
|
||||
|
||||
export let activeInstance: any = null
|
||||
export let isUpdatingChildComponent: boolean = false
|
||||
|
||||
export function setActiveInstance(vm: Component) {
|
||||
const prevActiveInstance = activeInstance
|
||||
activeInstance = vm
|
||||
return () => {
|
||||
activeInstance = prevActiveInstance
|
||||
}
|
||||
}
|
||||
|
||||
export function initLifecycle (vm: Component) {
|
||||
const options = vm.$options
|
||||
|
||||
@@ -50,31 +58,20 @@ export function initLifecycle (vm: Component) {
|
||||
export function lifecycleMixin (Vue: Class<Component>) {
|
||||
Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
|
||||
const vm: Component = this
|
||||
if (vm._isMounted) {
|
||||
callHook(vm, 'beforeUpdate')
|
||||
}
|
||||
const prevEl = vm.$el
|
||||
const prevVnode = vm._vnode
|
||||
const prevActiveInstance = activeInstance
|
||||
activeInstance = vm
|
||||
const restoreActiveInstance = setActiveInstance(vm)
|
||||
vm._vnode = vnode
|
||||
// Vue.prototype.__patch__ is injected in entry points
|
||||
// based on the rendering backend used.
|
||||
if (!prevVnode) {
|
||||
// initial render
|
||||
vm.$el = vm.__patch__(
|
||||
vm.$el, vnode, hydrating, false /* removeOnly */,
|
||||
vm.$options._parentElm,
|
||||
vm.$options._refElm
|
||||
)
|
||||
// no need for the ref nodes after initial patch
|
||||
// this prevents keeping a detached DOM tree in memory (#5851)
|
||||
vm.$options._parentElm = vm.$options._refElm = null
|
||||
vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */)
|
||||
} else {
|
||||
// updates
|
||||
vm.$el = vm.__patch__(prevVnode, vnode)
|
||||
}
|
||||
activeInstance = prevActiveInstance
|
||||
restoreActiveInstance()
|
||||
// update __vue__ reference
|
||||
if (prevEl) {
|
||||
prevEl.__vue__ = null
|
||||
@@ -197,7 +194,13 @@ export function mountComponent (
|
||||
// we set this to vm._watcher inside the watcher's constructor
|
||||
// since the watcher's initial patch may call $forceUpdate (e.g. inside child
|
||||
// component's mounted hook), which relies on vm._watcher being already defined
|
||||
new Watcher(vm, updateComponent, noop, null, true /* isRenderWatcher */)
|
||||
new Watcher(vm, updateComponent, noop, {
|
||||
before () {
|
||||
if (vm._isMounted && !vm._isDestroyed) {
|
||||
callHook(vm, 'beforeUpdate')
|
||||
}
|
||||
}
|
||||
}, true /* isRenderWatcher */)
|
||||
hydrating = false
|
||||
|
||||
// manually mounted instance, call mounted on self
|
||||
@@ -221,12 +224,26 @@ export function updateChildComponent (
|
||||
}
|
||||
|
||||
// determine whether component has slot children
|
||||
// we need to do this before overwriting $options._renderChildren
|
||||
const hasChildren = !!(
|
||||
// we need to do this before overwriting $options._renderChildren.
|
||||
|
||||
// check if there are dynamic scopedSlots (hand-written or compiled but with
|
||||
// dynamic slot names). Static scoped slots compiled from template has the
|
||||
// "$stable" marker.
|
||||
const newScopedSlots = parentVnode.data.scopedSlots
|
||||
const oldScopedSlots = vm.$scopedSlots
|
||||
const hasDynamicScopedSlot = !!(
|
||||
(newScopedSlots && !newScopedSlots.$stable) ||
|
||||
(oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
|
||||
(newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)
|
||||
)
|
||||
|
||||
// Any static slot children from the parent may have changed during parent's
|
||||
// update. Dynamic scoped slots may also have changed. In such cases, a forced
|
||||
// update is necessary to ensure correctness.
|
||||
const needsForceUpdate = !!(
|
||||
renderChildren || // has new static slots
|
||||
vm.$options._renderChildren || // has old static slots
|
||||
parentVnode.data.scopedSlots || // has new scoped slots
|
||||
vm.$scopedSlots !== emptyObject // has old scoped slots
|
||||
hasDynamicScopedSlot
|
||||
)
|
||||
|
||||
vm.$options._parentVnode = parentVnode
|
||||
@@ -265,7 +282,7 @@ export function updateChildComponent (
|
||||
updateComponentListeners(vm, listeners, oldListeners)
|
||||
|
||||
// resolve slots + force update if has children
|
||||
if (hasChildren) {
|
||||
if (needsForceUpdate) {
|
||||
vm.$slots = resolveSlots(renderChildren, parentVnode.context)
|
||||
vm.$forceUpdate()
|
||||
}
|
||||
@@ -320,13 +337,10 @@ export function callHook (vm: Component, hook: string) {
|
||||
// #7573 disable dep collection when invoking lifecycle hooks
|
||||
pushTarget()
|
||||
const handlers = vm.$options[hook]
|
||||
const info = `${hook} hook`
|
||||
if (handlers) {
|
||||
for (let i = 0, j = handlers.length; i < j; i++) {
|
||||
try {
|
||||
handlers[i].call(vm)
|
||||
} catch (e) {
|
||||
handleError(e, vm, `${hook} hook`)
|
||||
}
|
||||
invokeWithErrorHandling(handlers[i], vm, null, vm, info)
|
||||
}
|
||||
}
|
||||
if (vm._hasHookEvent) {
|
||||
|
||||
19
node_modules/vue/src/core/instance/proxy.js
generated
vendored
19
node_modules/vue/src/core/instance/proxy.js
generated
vendored
@@ -24,6 +24,16 @@ if (process.env.NODE_ENV !== 'production') {
|
||||
)
|
||||
}
|
||||
|
||||
const warnReservedPrefix = (target, key) => {
|
||||
warn(
|
||||
`Property "${key}" must be accessed with "$data.${key}" because ` +
|
||||
'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
|
||||
'prevent conflicts with Vue internals' +
|
||||
'See: https://vuejs.org/v2/api/#data',
|
||||
target
|
||||
)
|
||||
}
|
||||
|
||||
const hasProxy =
|
||||
typeof Proxy !== 'undefined' && isNative(Proxy)
|
||||
|
||||
@@ -45,9 +55,11 @@ if (process.env.NODE_ENV !== 'production') {
|
||||
const hasHandler = {
|
||||
has (target, key) {
|
||||
const has = key in target
|
||||
const isAllowed = allowedGlobals(key) || key.charAt(0) === '_'
|
||||
const isAllowed = allowedGlobals(key) ||
|
||||
(typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data))
|
||||
if (!has && !isAllowed) {
|
||||
warnNonPresent(target, key)
|
||||
if (key in target.$data) warnReservedPrefix(target, key)
|
||||
else warnNonPresent(target, key)
|
||||
}
|
||||
return has || !isAllowed
|
||||
}
|
||||
@@ -56,7 +68,8 @@ if (process.env.NODE_ENV !== 'production') {
|
||||
const getHandler = {
|
||||
get (target, key) {
|
||||
if (typeof key === 'string' && !(key in target)) {
|
||||
warnNonPresent(target, key)
|
||||
if (key in target.$data) warnReservedPrefix(target, key)
|
||||
else warnNonPresent(target, key)
|
||||
}
|
||||
return target[key]
|
||||
}
|
||||
|
||||
8
node_modules/vue/src/core/instance/render-helpers/bind-object-props.js
generated
vendored
8
node_modules/vue/src/core/instance/render-helpers/bind-object-props.js
generated
vendored
@@ -6,7 +6,8 @@ import {
|
||||
warn,
|
||||
isObject,
|
||||
toObject,
|
||||
isReservedAttribute
|
||||
isReservedAttribute,
|
||||
camelize
|
||||
} from 'core/util/index'
|
||||
|
||||
/**
|
||||
@@ -43,12 +44,13 @@ export function bindObjectProps (
|
||||
? data.domProps || (data.domProps = {})
|
||||
: data.attrs || (data.attrs = {})
|
||||
}
|
||||
if (!(key in hash)) {
|
||||
const camelizedKey = camelize(key)
|
||||
if (!(key in hash) && !(camelizedKey in hash)) {
|
||||
hash[key] = value[key]
|
||||
|
||||
if (isSync) {
|
||||
const on = data.on || (data.on = {})
|
||||
on[`update:${key}`] = function ($event) {
|
||||
on[`update:${camelizedKey}`] = function ($event) {
|
||||
value[key] = $event
|
||||
}
|
||||
}
|
||||
|
||||
5
node_modules/vue/src/core/instance/render-helpers/index.js
generated
vendored
5
node_modules/vue/src/core/instance/render-helpers/index.js
generated
vendored
@@ -9,7 +9,8 @@ import { checkKeyCodes } from './check-keycodes'
|
||||
import { bindObjectProps } from './bind-object-props'
|
||||
import { renderStatic, markOnce } from './render-static'
|
||||
import { bindObjectListeners } from './bind-object-listeners'
|
||||
import { resolveScopedSlots } from './resolve-slots'
|
||||
import { resolveScopedSlots } from './resolve-scoped-slots'
|
||||
import { bindDynamicKeys, prependModifier } from './bind-dynamic-keys'
|
||||
|
||||
export function installRenderHelpers (target: any) {
|
||||
target._o = markOnce
|
||||
@@ -27,4 +28,6 @@ export function installRenderHelpers (target: any) {
|
||||
target._e = createEmptyVNode
|
||||
target._u = resolveScopedSlots
|
||||
target._g = bindObjectListeners
|
||||
target._d = bindDynamicKeys
|
||||
target._p = prependModifier
|
||||
}
|
||||
|
||||
27
node_modules/vue/src/core/instance/render-helpers/render-list.js
generated
vendored
27
node_modules/vue/src/core/instance/render-helpers/render-list.js
generated
vendored
@@ -1,6 +1,6 @@
|
||||
/* @flow */
|
||||
|
||||
import { isObject, isDef } from 'core/util/index'
|
||||
import { isObject, isDef, hasSymbol } from 'core/util/index'
|
||||
|
||||
/**
|
||||
* Runtime helper for rendering v-for lists.
|
||||
@@ -25,15 +25,26 @@ export function renderList (
|
||||
ret[i] = render(i + 1, i)
|
||||
}
|
||||
} else if (isObject(val)) {
|
||||
keys = Object.keys(val)
|
||||
ret = new Array(keys.length)
|
||||
for (i = 0, l = keys.length; i < l; i++) {
|
||||
key = keys[i]
|
||||
ret[i] = render(val[key], key, i)
|
||||
if (hasSymbol && val[Symbol.iterator]) {
|
||||
ret = []
|
||||
const iterator: Iterator<any> = val[Symbol.iterator]()
|
||||
let result = iterator.next()
|
||||
while (!result.done) {
|
||||
ret.push(render(result.value, ret.length))
|
||||
result = iterator.next()
|
||||
}
|
||||
} else {
|
||||
keys = Object.keys(val)
|
||||
ret = new Array(keys.length)
|
||||
for (i = 0, l = keys.length; i < l; i++) {
|
||||
key = keys[i]
|
||||
ret[i] = render(val[key], key, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isDef(ret)) {
|
||||
(ret: any)._isVList = true
|
||||
if (!isDef(ret)) {
|
||||
ret = []
|
||||
}
|
||||
(ret: any)._isVList = true
|
||||
return ret
|
||||
}
|
||||
|
||||
14
node_modules/vue/src/core/instance/render-helpers/render-slot.js
generated
vendored
14
node_modules/vue/src/core/instance/render-helpers/render-slot.js
generated
vendored
@@ -26,19 +26,7 @@ export function renderSlot (
|
||||
}
|
||||
nodes = scopedSlotFn(props) || fallback
|
||||
} else {
|
||||
const slotNodes = this.$slots[name]
|
||||
// warn duplicate slot usage
|
||||
if (slotNodes) {
|
||||
if (process.env.NODE_ENV !== 'production' && slotNodes._rendered) {
|
||||
warn(
|
||||
`Duplicate presence of slot "${name}" found in the same render tree ` +
|
||||
`- this will likely cause render errors.`,
|
||||
this
|
||||
)
|
||||
}
|
||||
slotNodes._rendered = true
|
||||
}
|
||||
nodes = slotNodes || fallback
|
||||
nodes = this.$slots[name] || fallback
|
||||
}
|
||||
|
||||
const target = props && props.slot
|
||||
|
||||
21
node_modules/vue/src/core/instance/render-helpers/resolve-slots.js
generated
vendored
21
node_modules/vue/src/core/instance/render-helpers/resolve-slots.js
generated
vendored
@@ -9,10 +9,10 @@ export function resolveSlots (
|
||||
children: ?Array<VNode>,
|
||||
context: ?Component
|
||||
): { [key: string]: Array<VNode> } {
|
||||
const slots = {}
|
||||
if (!children) {
|
||||
return slots
|
||||
if (!children || !children.length) {
|
||||
return {}
|
||||
}
|
||||
const slots = {}
|
||||
for (let i = 0, l = children.length; i < l; i++) {
|
||||
const child = children[i]
|
||||
const data = child.data
|
||||
@@ -48,18 +48,3 @@ export function resolveSlots (
|
||||
function isWhitespace (node: VNode): boolean {
|
||||
return (node.isComment && !node.asyncFactory) || node.text === ' '
|
||||
}
|
||||
|
||||
export function resolveScopedSlots (
|
||||
fns: ScopedSlotsData, // see flow/vnode
|
||||
res?: Object
|
||||
): { [key: string]: Function } {
|
||||
res = res || {}
|
||||
for (let i = 0; i < fns.length; i++) {
|
||||
if (Array.isArray(fns[i])) {
|
||||
resolveScopedSlots(fns[i], res)
|
||||
} else {
|
||||
res[fns[i].key] = fns[i].fn
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
46
node_modules/vue/src/core/instance/render.js
generated
vendored
46
node_modules/vue/src/core/instance/render.js
generated
vendored
@@ -11,6 +11,7 @@ import {
|
||||
import { createElement } from '../vdom/create-element'
|
||||
import { installRenderHelpers } from './render-helpers/index'
|
||||
import { resolveSlots } from './render-helpers/resolve-slots'
|
||||
import { normalizeScopedSlots } from '../vdom/helpers/normalize-scoped-slots'
|
||||
import VNode, { createEmptyVNode } from '../vdom/vnode'
|
||||
|
||||
import { isUpdatingChildComponent } from './lifecycle'
|
||||
@@ -50,6 +51,13 @@ export function initRender (vm: Component) {
|
||||
}
|
||||
}
|
||||
|
||||
export let currentRenderingInstance: Component | null = null
|
||||
|
||||
// for testing only
|
||||
export function setCurrentRenderingInstance (vm: Component) {
|
||||
currentRenderingInstance = vm
|
||||
}
|
||||
|
||||
export function renderMixin (Vue: Class<Component>) {
|
||||
// install runtime convenience helpers
|
||||
installRenderHelpers(Vue.prototype)
|
||||
@@ -62,16 +70,12 @@ export function renderMixin (Vue: Class<Component>) {
|
||||
const vm: Component = this
|
||||
const { render, _parentVnode } = vm.$options
|
||||
|
||||
// reset _rendered flag on slots for duplicate slot check
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
for (const key in vm.$slots) {
|
||||
// $flow-disable-line
|
||||
vm.$slots[key]._rendered = false
|
||||
}
|
||||
}
|
||||
|
||||
if (_parentVnode) {
|
||||
vm.$scopedSlots = _parentVnode.data.scopedSlots || emptyObject
|
||||
vm.$scopedSlots = normalizeScopedSlots(
|
||||
_parentVnode.data.scopedSlots,
|
||||
vm.$slots,
|
||||
vm.$scopedSlots
|
||||
)
|
||||
}
|
||||
|
||||
// set parent vnode. this allows render functions to have access
|
||||
@@ -80,26 +84,32 @@ export function renderMixin (Vue: Class<Component>) {
|
||||
// render self
|
||||
let vnode
|
||||
try {
|
||||
// There's no need to maintain a stack becaues all render fns are called
|
||||
// separately from one another. Nested component's render fns are called
|
||||
// when parent component is patched.
|
||||
currentRenderingInstance = vm
|
||||
vnode = render.call(vm._renderProxy, vm.$createElement)
|
||||
} catch (e) {
|
||||
handleError(e, vm, `render`)
|
||||
// return error render result,
|
||||
// or previous vnode to prevent render error causing blank component
|
||||
/* istanbul ignore else */
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
if (vm.$options.renderError) {
|
||||
try {
|
||||
vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e)
|
||||
} catch (e) {
|
||||
handleError(e, vm, `renderError`)
|
||||
vnode = vm._vnode
|
||||
}
|
||||
} else {
|
||||
if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {
|
||||
try {
|
||||
vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e)
|
||||
} catch (e) {
|
||||
handleError(e, vm, `renderError`)
|
||||
vnode = vm._vnode
|
||||
}
|
||||
} else {
|
||||
vnode = vm._vnode
|
||||
}
|
||||
} finally {
|
||||
currentRenderingInstance = null
|
||||
}
|
||||
// if the returned array contains only a single node, allow it
|
||||
if (Array.isArray(vnode) && vnode.length === 1) {
|
||||
vnode = vnode[0]
|
||||
}
|
||||
// return empty vnode in case the render function errored out
|
||||
if (!(vnode instanceof VNode)) {
|
||||
|
||||
30
node_modules/vue/src/core/instance/state.js
generated
vendored
30
node_modules/vue/src/core/instance/state.js
generated
vendored
@@ -86,7 +86,7 @@ function initProps (vm: Component, propsOptions: Object) {
|
||||
)
|
||||
}
|
||||
defineReactive(props, key, value, () => {
|
||||
if (vm.$parent && !isUpdatingChildComponent) {
|
||||
if (!isRoot && !isUpdatingChildComponent) {
|
||||
warn(
|
||||
`Avoid mutating a prop directly since the value will be ` +
|
||||
`overwritten whenever the parent component re-renders. ` +
|
||||
@@ -216,17 +216,15 @@ export function defineComputed (
|
||||
if (typeof userDef === 'function') {
|
||||
sharedPropertyDefinition.get = shouldCache
|
||||
? createComputedGetter(key)
|
||||
: userDef
|
||||
: createGetterInvoker(userDef)
|
||||
sharedPropertyDefinition.set = noop
|
||||
} else {
|
||||
sharedPropertyDefinition.get = userDef.get
|
||||
? shouldCache && userDef.cache !== false
|
||||
? createComputedGetter(key)
|
||||
: userDef.get
|
||||
: noop
|
||||
sharedPropertyDefinition.set = userDef.set
|
||||
? userDef.set
|
||||
: createGetterInvoker(userDef.get)
|
||||
: noop
|
||||
sharedPropertyDefinition.set = userDef.set || noop
|
||||
}
|
||||
if (process.env.NODE_ENV !== 'production' &&
|
||||
sharedPropertyDefinition.set === noop) {
|
||||
@@ -255,13 +253,19 @@ function createComputedGetter (key) {
|
||||
}
|
||||
}
|
||||
|
||||
function createGetterInvoker(fn) {
|
||||
return function computedGetter () {
|
||||
return fn.call(this, this)
|
||||
}
|
||||
}
|
||||
|
||||
function initMethods (vm: Component, methods: Object) {
|
||||
const props = vm.$options.props
|
||||
for (const key in methods) {
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
if (methods[key] == null) {
|
||||
if (typeof methods[key] !== 'function') {
|
||||
warn(
|
||||
`Method "${key}" has an undefined value in the component definition. ` +
|
||||
`Method "${key}" has type "${typeof methods[key]}" in the component definition. ` +
|
||||
`Did you reference the function correctly?`,
|
||||
vm
|
||||
)
|
||||
@@ -279,7 +283,7 @@ function initMethods (vm: Component, methods: Object) {
|
||||
)
|
||||
}
|
||||
}
|
||||
vm[key] = methods[key] == null ? noop : bind(methods[key], vm)
|
||||
vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,7 +325,7 @@ export function stateMixin (Vue: Class<Component>) {
|
||||
const propsDef = {}
|
||||
propsDef.get = function () { return this._props }
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
dataDef.set = function (newData: Object) {
|
||||
dataDef.set = function () {
|
||||
warn(
|
||||
'Avoid replacing instance root $data. ' +
|
||||
'Use nested data properties instead.',
|
||||
@@ -351,7 +355,11 @@ export function stateMixin (Vue: Class<Component>) {
|
||||
options.user = true
|
||||
const watcher = new Watcher(vm, expOrFn, cb, options)
|
||||
if (options.immediate) {
|
||||
cb.call(vm, watcher.value)
|
||||
try {
|
||||
cb.call(vm, watcher.value)
|
||||
} catch (error) {
|
||||
handleError(error, vm, `callback for immediate watcher "${watcher.expression}"`)
|
||||
}
|
||||
}
|
||||
return function unwatchFn () {
|
||||
watcher.teardown()
|
||||
|
||||
Reference in New Issue
Block a user