inheritance.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. var Vue = require('../src/vue')
  2. window.model = {
  3. a: 'parent a',
  4. b: 'parent b',
  5. c: {
  6. d: 3
  7. },
  8. arr: [{a: 'item a'}],
  9. go: function () {
  10. console.log(this.a)
  11. }
  12. }
  13. window.vm = new Vue({
  14. data: model
  15. })
  16. window.child = new Vue({
  17. parent: vm,
  18. data: {
  19. a: 'child a',
  20. change: function () {
  21. this.c.d = 4
  22. this.b = 456 // Unlike Angular, setting primitive values in Vue WILL affect outer scope,
  23. // unless you overwrite it in the instantiation data!
  24. }
  25. }
  26. })
  27. window.item = new Vue({
  28. parent: vm,
  29. data: vm.arr[0]
  30. })
  31. vm._observer.on('set', function (key, val) {
  32. console.log('vm set:' + key.replace(/[\b]/g, '.'), val)
  33. })
  34. child._observer.on('set', function (key, val) {
  35. console.log('child set:' + key.replace(/[\b]/g, '.'), val)
  36. })
  37. item._observer.on('set', function (key, val) {
  38. console.log('item set:' + key.replace(/[\b]/g, '.'), val)
  39. })
  40. // TODO turn these into tests
  41. console.log(vm.a) // 'parent a'
  42. console.log(child.a) // 'child a'
  43. console.log(child.$scope.a) // 'child a'
  44. console.log(child.b) // undefined
  45. console.log(child.$scope.b) // 'parent b'
  46. console.log(item.a) // 'item a'
  47. console.log(item.$scope.a) // 'item a'
  48. console.log(item.b) // undefined
  49. console.log(item.$scope.b) // 'parent b'
  50. // set shadowed parent property
  51. vm.a = 'haha!' // vm set:a haha!
  52. // set shadowed child property
  53. child.a = 'hmm' // child set:a hmm
  54. // test parent scope change downward propagation
  55. vm.b = 'hoho!' // child set:b hoho!
  56. // item set:b hoho!
  57. // vm set:b hoho!
  58. // set child owning an array item
  59. item.a = 'wow' // child set:arr.0.a wow
  60. // item set:arr.0.a wow
  61. // vm set:arr.0.a wow
  62. // item set:a wow