Хм, на ум приходит нечто такое:
const box = new Vue({data: {groups: []}});
Object.defineProperty(Vue.prototype, '$dataGroups', {
configurable: true,
get() { return box.groups; },
set(value) { box.groups = value; }
});
P.S. у Вас разные свойства $dataGroups и $dataGroupsActive
P.S.S. иметь в прототипе объекты/массивы не очень хорошая практика, лучше сделать подобно тому, как Vuex кидает $store в инстансы, через миксин:
https://github.com/vuejs/vuex/blob/dev/src/mixin.js#L22UPD: пример с миксином:
Vue.mixin({
beforeCreate() {
const {$options} = this;
const {parent} = $options;
if($options.dataGroups) {
const groups = typeof $options.dataGroups === 'function' ? $options.dataGroups() : $options.dataGroups;
const box = new Vue({data: {groups}});
Object.defineProperty(this, '$dataGroups', {
configurable: true,
get() { return box.groups; },
set(value) { box.groups = value; }
});
return;
}
if(!parent) { return; }
const descriptor = Object.getOwnPropertyDescriptor(parent, '$dataGroups');
if(!descriptor) { return; }
Object.defineProperty(this, '$dataGroups', descriptor);
}
});