Skip to content

Commit 64ab8d5

Browse files
committed
vm.$watch: support filters
1 parent 4e75f04 commit 64ab8d5

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
@@ -73,7 +73,7 @@ exports.$delete = function (key) {
7373
* Watch an expression, trigger callback when its
7474
* value changes.
7575
*
76-
* @param {String} exp
76+
* @param {String|Function} expOrFn
7777
* @param {Function} cb
7878
* @param {Object} [options]
7979
* - {Boolean} deep
@@ -82,11 +82,17 @@ exports.$delete = function (key) {
8282
* @return {Function} - unwatchFn
8383
*/
8484

85-
exports.$watch = function (exp, cb, options) {
85+
exports.$watch = function (expOrFn, cb, options) {
8686
var vm = this
87-
var watcher = new Watcher(vm, exp, cb, {
87+
var parsed
88+
if (typeof expOrFn === 'string') {
89+
parsed = dirParser.parse(expOrFn)[0]
90+
expOrFn = parsed.expression
91+
}
92+
var watcher = new Watcher(vm, expOrFn, cb, {
8893
deep: options && options.deep,
89-
user: !options || options.user !== false
94+
user: !options || options.user !== false,
95+
filters: parsed && parsed.filters
9096
})
9197
if (options && options.immediate) {
9298
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
@@ -148,6 +148,16 @@ describe('Data API', function () {
148148
})
149149
})
150150

151+
it('$watch with filters', function (done) {
152+
var spy = jasmine.createSpy()
153+
vm.$watch('a | double', spy)
154+
vm.a = 2
155+
nextTick(function () {
156+
expect(spy).toHaveBeenCalledWith(4, 2)
157+
done()
158+
})
159+
})
160+
151161
it('$eval', function () {
152162
expect(vm.$eval('a')).toBe(1)
153163
expect(vm.$eval('b.c')).toBe(2)

0 commit comments

Comments
 (0)