You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.2 KiB
36 lines
1.2 KiB
|
3 years ago
|
/* @flow */
|
||
|
|
|
||
|
|
// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
|
||
|
|
// For example, the following template:
|
||
|
|
//
|
||
|
|
// <div id="app" :[key]="value">
|
||
|
|
//
|
||
|
|
// compiles to the following:
|
||
|
|
//
|
||
|
|
// _c('div', { attrs: bindDynamicKeys({ "id": "app" }, [key, value]) })
|
||
|
|
|
||
|
|
import { warn } from 'core/util/debug'
|
||
|
|
|
||
|
|
export function bindDynamicKeys (baseObj: Object, values: Array<any>): Object {
|
||
|
|
for (let i = 0; i < values.length; i += 2) {
|
||
|
|
const key = values[i]
|
||
|
|
if (typeof key === 'string' && key) {
|
||
|
|
baseObj[values[i]] = values[i + 1]
|
||
|
|
} else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {
|
||
|
|
// null is a special value for explicitly removing a binding
|
||
|
|
warn(
|
||
|
|
`Invalid value for dynamic directive argument (expected string or null): ${key}`,
|
||
|
|
this
|
||
|
|
)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return baseObj
|
||
|
|
}
|
||
|
|
|
||
|
|
// helper to dynamically append modifier runtime markers to event names.
|
||
|
|
// ensure only append when value is already string, otherwise it will be cast
|
||
|
|
// to string and cause the type check to miss.
|
||
|
|
export function prependModifier (value: any, symbol: string): any {
|
||
|
|
return typeof value === 'string' ? symbol + value : value
|
||
|
|
}
|