Improvements
- Two-way filters for
v-model have been reworked. A v-model binding with read filters will no longer attempt to format the value when the user is still typing; instead it formats the value on blur. This results in a much more natural UX and makes two-way filters much more usable. Demo
<select v-model="x" options="options"> now supports Object values. That is to say you can provide the options array like this:
options = [
{ text: 'a', value: { msg: 'A' }},
{ text: 'b', value: { msg: 'B' }},
{ text: 'c', value: { msg: 'C' }}
]
And the bound value x will be the actual object instead of a serialized string.
- filterBy filter has been improved (#1094):
1. It now accepts multiple dataKeys arguments
2. Each dataKey argument can be either a String or an Array of Strings.
3. You can alternatively provide a custom filter function as the first argument.
Example:
<!-- multiple dataKeys -->
<div v-repeat="user in users | filterBy searchText in 'fieldA' 'fieldB'">
<!-- Array dataKeys -->
<!-- fields = ['fieldA', 'fieldB'] -->
<div v-repeat="user in users | filterBy searchText in fields">
<!-- filter by function -->
<div v-repeat="user in users | filterBy myCustomFilterFunction">
currency filter can now accept an empty string argument to output the result without a currency symbol.
- When in
debug mode, Vue will also print async stack traces for warnings. Previously the stack trace stops at the internal batcher handler due to Vue's async update queue; now the stack trace goes all the way back to what originally triggered the update.
- Component asset names can also be in PascalCase in addition to camelCase:
myComponent and MyComponent will both be interpreted as my-component during the lookup.
- Data object properties prefixed with
_ and $ are now also observed; this means they can be used for data binding, however if it is a root-level property it will not be proxied on the vm instance.
For example:
var vm = new Vue({
data: {
_test: 123
}
})
vm._test // -> undefined
vm.$data._test // -> 123
<!-- also need to access via $data in templates -->
<p>{{ $data._test }}</p>
- #### Computed Property Caching
You can now turn off caching for a specific computed property so that it behaves like a simple getter.
By default, a computed propoerty's cache is only invalidated when one of its reactive dependencies have changed, but this can result in confusion when the user assumes it behaves like a getter.
For example:
computed: {
example: function () {
return Date.now() + this.msg
}
}
The cache for vm.example only invalidates when vm.msg has changed, because Vue has no way to detect whether Date.now() has changed or not (polling is obviously a bad idea). So, when you access vm.example, it will not change unless vm.msg has changed.
This is different from a simple getter-like behavior, where the function is re-evaludated every time the property is accessed. If that is what you want, you can turn off caching for that property like this:
computed: {
example: {
get: function () { /* same getter */ },
cache: false
}
}
New
- Added
debounce filter which can be used with v-on for debouncing DOM events.
Example:
<input v-on="input: onInput | denounce 300">
Fixed
v-attr should also set corresponding properties for selected and checked.
- #1139 error when compiling props for a component with fragment
el
- #1150
keep-alive and wait-for not working together
- #1152 dynamic component left undestroyed with
keep-alive + wait-for
- #1155 select option with empty string initial value not initialized properly
- #1162 computed properties evaluation affected by order of data manipulations
- #1185
v-if linker cache not taking transclusion host into account
- #1191 resolveAsset not working properly for transcluded components in strict mode