我有一个组件,它有两个文本字段和两个表达式,它们的计算结果应该是相同的。
<template>
<div>
{{ value.flange?value.circle.diameter:413 }}
{{ get(value, 'circle.diameter') }}
</div>
</template>
<script>
import _ from "lodash/fp"
export default {
name: "MyComponent",
props: {
value: {
type: Object,
default: () => ({}),
},
},
methods: {
get (obj, path) {
return _.get(obj, path)
},
},
}
</script>
这是我试图在this.value
未定义的短暂时刻保护我的页面不在属性查找中崩溃。我更喜欢使用lodash/fp的_.get
函数,因为它对于更深层次的嵌套对象来说可读性更强,也不那么乏味。
然而,当我加载这个页面时,我看到413的短暂波动,什么都没有,这是意料之中的。由于413是第一个表达式的占位符值,第二个表达式应该是未定义的。然后,当value
得到更新时,413很快变为value.circle.diameter
,这是应该的,但封装在get
中的那个永远不会更新。
为什么方法调用会阻止传播?当值未定义时,我通常应该如何防止我的深度嵌套对象在属性访问时崩溃?
注意:当对象为null时,我不想阻止页面的呈现,例如,我的div
上有一个v-if="value"
。这是因为如果值是{}
,我希望能够编辑它,并在用户编辑它时构造该结构
这是因为属性是被动的,而函数调用不是。然而,您可以通过计算属性来实现这一点:
<template>
<div>
{{ value.flange?value.circle.diameter:413 }}
{{ diameter }}
</div>
</template>
<script>
import _ from "lodash/fp"
export default {
name: "MyComponent",
props: {
value: {
type: Object,
default: () => ({}),
},
},
computed: {
diameter: function () {
return _.get(this.value, 'circle.diameter');
}
}
}
</script>