[Vue警告]:渲染错误:“ TypeError:_vm.activity.activity未定义”

时间:2018-07-26 10:09:55

标签: javascript vue.js vuex

我有这个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对象

我无法弄清楚为什么该行在正常显示时会引发错误。

2 个答案:

答案 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