В vue 2 добавленые после создания ключи объектов не реактивы из-за технических ограничений. (Раньше это большими буквами в доках писалось).
Надо использовать
this.$set \ Vue.set
при добавлении нового ключа.
В твоём случае можно переделать так:
const templates = reactive(keyBy(templatesArr, 'id'))
for (let templateId in templates) {
const devices = devicesArr.filter(device => device.templateId === templateId)
Vue.set(templates[templateId], 'devices', devices);
Vue.set(templates[templateId], 'settings', {});
}
// либо просто так:
const templates = keyBy(templatesArr, 'id');
for (let templateId in templates) {
const devices = devicesArr.filter(device => device.templateId === templateId)
Object.assign(templates[templateId], { devices }, {settings: {}})
}
reactive(templates);
P.S. не помню чтоб в vue 2 было
reactive
, вместо него был
Vue.observable
. Но может добавили, хз, лень смотреть.:)