Skip to content

Commit d833cba

Browse files
pespantelisyyx990803
authored andcommitted
Add an option to extend a component (#2701)
1 parent 58b076b commit d833cba

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

src/util/options.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@ export function mergeOptions (parent, child, vm) {
332332
}
333333
var options = {}
334334
var key
335+
if (child.extends) {
336+
parent = mergeOptions(parent, child.extends, vm)
337+
}
335338
if (child.mixins) {
336339
for (var i = 0, l = child.mixins.length; i < l; i++) {
337340
parent = mergeOptions(parent, child.mixins[i], vm)

test/unit/specs/util/options_spec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,20 @@ describe('Util - Option merging', function () {
278278
expect(Object.getOwnPropertyDescriptor(data, 'b').get).toBeTruthy()
279279
})
280280

281+
it('extends', function () {
282+
var f1 = function () {}
283+
var f2 = function () {}
284+
var f3 = function () {}
285+
var componentA = { template: 'foo', methods: { f1: f1, f2: function () {} } }
286+
var componentB = { extends: componentA, methods: { f2: f2 } }
287+
var componentC = { extends: componentB, template: 'bar', methods: { f3: f3 } }
288+
var res = merge({}, componentC)
289+
expect(res.template).toBe('bar')
290+
expect(res.methods.f1).toBe(f1)
291+
expect(res.methods.f2).toBe(f2)
292+
expect(res.methods.f3).toBe(f3)
293+
})
294+
281295
it('mixins', function () {
282296
var a = {}
283297
var b = {}

0 commit comments

Comments
 (0)