Skip to content

Commit 6efe10c

Browse files
committed
add test case for passing in $data as prop
1 parent 523389b commit 6efe10c

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/instance/scope.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ exports._initData = function () {
3131
i = props.length
3232
while (i--) {
3333
key = _.camelize(props[i])
34-
if (!(key in data)) {
35-
data[key] = null
34+
if (!(key in data) && key !== '$data') {
35+
data[key] = undefined
3636
}
3737
}
3838
}
@@ -65,7 +65,9 @@ exports._setData = function (newData) {
6565
i = props.length
6666
while (i--) {
6767
key = props[i]
68-
newData.$set(key, oldData[key])
68+
if (key !== '$data') {
69+
newData.$set(key, oldData[key])
70+
}
6971
}
7072
}
7173
// unproxy keys not present in new data

test/unit/specs/directives/prop_spec.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,30 @@ if (_.inBrowser) {
5858
})
5959
})
6060

61+
it('$data as prop', function (done) {
62+
var vm = new Vue({
63+
el: el,
64+
template: '<test $data="{{ok}}"></test>',
65+
data: {
66+
ok: {
67+
msg: 'hihi'
68+
}
69+
},
70+
components: {
71+
test: {
72+
props: ['$data'],
73+
template: '{{msg}}'
74+
}
75+
}
76+
})
77+
expect(el.innerHTML).toBe('<test>hihi</test>')
78+
vm.ok = { msg: 'what' }
79+
_.nextTick(function () {
80+
expect(el.innerHTML).toBe('<test>what</test>')
81+
done()
82+
})
83+
})
84+
6185
it('warn invalid keys', function () {
6286
var vm = new Vue({
6387
el: el,

0 commit comments

Comments
 (0)