我有这个VueJS组件,该组件给我错误You cannot call a method on a null-valued expression.
At line:9 char:1
+ $dathtml = ($html.parsedhtml.getelementsbytagname("TR") |% { ( $_.children | ?{ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[Vue warn]: Error in render: "TypeError: _vm.activity.activity is undefined"
行<template>
<div class="activity box">
<h1>{{activity.activity.title}}</h1>
<div>
</div>
<h2>{{activity}}</h2>
</div>
</template>
<script>
let activity = {}
export default {
data () {
return {
activity
}
},
methods: {},
created: function () {
this.$store.dispatch('show_activity', {params: {id: this.$route.params.id}}).then(activity => {
this.activity = activity.data
}, response => {
})
}
}
</script>
引起了错误。如果将其更改为<h1>{{activity.activity.title}}</h1>
,则页面加载正常。奇怪的是,第一个实际上确实在页面上加载了标题,但是引发的JS错误导致页面上的其他js无法正常运行。 <h1>{{activity}}</h1>
是从activity
加载的JSON对象
我无法弄清楚为什么该行在正常显示时会引发错误。
答案 0 :(得分:3)
由于activity
对象是通过获取一些数据而异步设置的,因此当模板尝试访问它时,它不包含内部的属性activity
。
最好在获取数据后呈现它。因此,将v-if
指令用作:
<h1 v-if="activity.activity">{{activity.activity.title}}</h1>
如果您显示某种加载方式以指示用户正在加载数据,那就更好了。
<h1 v-if="activity.activity">{{activity.activity.title}}</h1>
<p v-else> loading.....</p>
答案 1 :(得分:0)
您应该在func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
// If this is our anchor, create a node
if self.detectedDataAnchor?.identifier == anchor.identifier {
let sphere = SCNSphere(radius: 1.0)
sphere.firstMaterial?.diffuse.contents = UIColor.redColor()
let sphereNode = SCNNode(geometry: sphere)
sphereNode.transform = SCNMatrix4(anchor.transform)
return sphereNode
}
return nil
}
部分中设置一个初始值(例如null),并更改模板以检查data
是否实际上是一个对象并定义了给定的键
activity