Javascript VueJS自动创建嵌套对象属性以简化代码 关于这个问题的一些背景知识
我已经构建了一个自定义系统来自动监视来自nosql数据库JSON的一些存储属性。没有什么太复杂的,除了嵌套所需的几个原因,这里没有讨论对象 数据结构如下所示:Javascript VueJS自动创建嵌套对象属性以简化代码 关于这个问题的一些背景知识,javascript,vue.js,Javascript,Vue.js,我已经构建了一个自定义系统来自动监视来自nosql数据库JSON的一些存储属性。没有什么太复杂的,除了嵌套所需的几个原因,这里没有讨论对象 数据结构如下所示: { store: { objA: { objB: { prop1: 'some value' } } } } 但是,由于它是一个提供存储属性的nosql数据库,所以从数据库加载之后,objB可能就不存在了 使用
{
store: {
objA: {
objB: {
prop1: 'some value'
}
}
}
}
但是,由于它是一个提供存储属性的nosql数据库,所以从数据库加载之后,objB可能就不存在了
使用的模板示例
我有一些自定义组件,它们的道具直接绑定到数据存储
<my-selector :value.sync="store.objA.objB.prop1">
</my-selector>
但是,当objB不存在时,它会崩溃,通常会出现javascript错误,表示它无法获取未定义的objB,但这是正常的
我正试图找到一种vuejs方法来为我准备数据
思想
为了应对这场崩溃:
在这种情况下,我不能使用v-if来屏蔽选择器。因为即使数据尚未设置,也可以使用该选择器示例:用于可选数据。
我可以修复从数据库获取数据的load函数,以便在将数据分配给数据存储之前初始化所需的属性,如objB。但是,这意味着我的初始VueJS数据对象也将包含这些必需的属性。如果我找不到任何替代解决方案,我可能会使用它,但我认为这不是最简单的方法,因为我必须在分配任务之前修复任何传入的数据。
我的首选是在模板中创建一个指令或任何其他构建的东西,如果缺少它们,可以为我添加它们。
VueJS始终计算绑定值
我想到了这个解决方案:
<my-selector v-autocreate="'store.objA.objB.prop1'" :value.sync="store.objA.objB.prop1">
</my-selector>
但是,指令绑定v-autocreate不会首先通过调试器检查。
我没有找到与指令或属性加载顺序相关的文档
我还希望使用bind指令获得节点的所有绑定
函数以避免重复字符串,但似乎我们无法获得我用于knockoutjs的信息,在这里,我们可以选择分配给节点的所有绑定,以实现不同的行为
我想达到这个目标,但我不确定我是否可能需要指令上的pre-bind/beforeBind事件,哈哈:
<my-selector v-autocreate :value.sync="store.objA.objB.prop1">
</my-selector>
其中v-autocreate将确保执行vm。$缺少的属性集。您可以创建一个方法来检查对象路径中的每个属性,如果不存在则创建它,然后返回最后一个属性的值 未测试的示例:
get(object, path) {
path = path.split('.')
let index = 0
const length = path.length
let val
while (object != null && index < length) {
let key = path[index++]
if(object[key] == null) {
this.$set(object, key, {})
}
object = object[key]
}
return val
}
用法:
<my-selector :value="get(store,'objA.objB.prop1')">
</my-selector>
您可能对lodash的get函数感兴趣,这就是代码示例的基础
你能让你的组件使用默认的道具值吗。。。问题不在于数据的验证,而是Webpack vue-template-es2015-compiler在尝试在属性内使用方法时崩溃。所以它不起作用。我不知道它是否适用于纯VueJs,但我想使用.vue文件+网页包。