Skip to content

Commit cac6370

Browse files
committed
vm.$watch: support filters
1 parent aef6aeb commit cac6370

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
@@ -62,7 +62,7 @@ exports.$delete = function (key) {
6262
* Watch an expression, trigger callback when its
6363
* value changes.
6464
*
65-
* @param {String} exp
65+
* @param {String|Function} expOrFn
6666
* @param {Function} cb
6767
* @param {Object} [options]
6868
* - {Boolean} deep
@@ -71,11 +71,17 @@ exports.$delete = function (key) {
7171
* @return {Function} - unwatchFn
7272
*/
7373

74-
exports.$watch = function (exp, cb, options) {
74+
exports.$watch = function (expOrFn, cb, options) {
7575
var vm = this
76-
var watcher = new Watcher(vm, exp, cb, {
76+
var parsed
77+
if (typeof expOrFn === 'string') {
78+
parsed = dirParser.parse(expOrFn)[0]
79+
expOrFn = parsed.expression
80+
}
81+
var watcher = new Watcher(vm, expOrFn, cb, {
7782
deep: options && options.deep,
78-
user: !options || options.user !== false
83+
user: !options || options.user !== false,
84+
filters: parsed && parsed.filters
7985
})
8086
if (options && options.immediate) {
8187
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
@@ -143,6 +143,16 @@ describe('Data API', function () {
143143
})
144144
})
145145

146+
it('$watch with filters', function (done) {
147+
var spy = jasmine.createSpy()
148+
vm.$watch('a | double', spy)
149+
vm.a = 2
150+
nextTick(function () {
151+
expect(spy).toHaveBeenCalledWith(4, 2)
152+
done()
153+
})
154+
})
155+
146156
it('$eval', function () {
147157
expect(vm.$eval('a')).toBe(1)
148158
expect(vm.$eval('b.c')).toBe(2)

0 commit comments

Comments
 (0)