Skip to content

Commit 832f688

Browse files
committed
vm.$watch: support filters
1 parent 92a62e8 commit 832f688

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/api/data.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ exports.$delete = function (key) {
5959
* Watch an expression, trigger callback when its
6060
* value changes.
6161
*
62-
* @param {String} exp
62+
* @param {String|Function} expOrFn
6363
* @param {Function} cb
6464
* @param {Object} [options]
6565
* - {Boolean} deep
@@ -68,11 +68,17 @@ exports.$delete = function (key) {
6868
* @return {Function} - unwatchFn
6969
*/
7070

71-
exports.$watch = function (exp, cb, options) {
71+
exports.$watch = function (expOrFn, cb, options) {
7272
var vm = this
73-
var watcher = new Watcher(vm, exp, cb, {
73+
var parsed
74+
if (typeof expOrFn === 'string') {
75+
parsed = dirParser.parse(expOrFn)
76+
expOrFn = parsed.expression
77+
}
78+
var watcher = new Watcher(vm, expOrFn, cb, {
7479
deep: options && options.deep,
75-
user: !options || options.user !== false
80+
user: !options || options.user !== false,
81+
filters: parsed && parsed.filters
7682
})
7783
if (options && options.immediate) {
7884
cb.call(vm, watcher.value)

test/unit/specs/api/data_spec.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,16 @@ describe('Data API', function () {
137137
})
138138
})
139139

140+
it('$watch with filters', function (done) {
141+
var spy = jasmine.createSpy()
142+
vm.$watch('a | double', spy)
143+
vm.a = 2
144+
nextTick(function () {
145+
expect(spy).toHaveBeenCalledWith(4, 2)
146+
done()
147+
})
148+
})
149+
140150
it('$eval', function () {
141151
expect(vm.$eval('a')).toBe(1)
142152
expect(vm.$eval('b.c')).toBe(2)

0 commit comments

Comments
 (0)