Vue.js无法读取属性' split'未定义的

时间:2016-10-31 10:48:57

标签: javascript vue.js

我在sub("\\s+\\+\\s+\\(.*", "", bla) #[1] "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6" 应用程序中显示分页符。

vue.js

但我收到错误:

<div class="Message__body__message">
    <p v-for="line in message.message.split('\n')" track-by="$index">{{ line }}<br></p>
</div>

main.js:7382 [Vue warn]: Error when evaluating expression "message.message.split('\n')": TypeError: Cannot read property 'split' of undefined 不是空的!我甚至收到了预期的结果,为什么会抛出这个错误?

3 个答案:

答案 0 :(得分:1)

  

我甚至收到了预期的结果,为什么会抛出这个错误?

因为在某个阶段, undefined。显然,如果你最终得到了你期望的结果,那么它就会被定义,但是那会更晚。

您可以通过以下方式解决

v-for="line in (message.message || "").split('\n')"

...但最好还是更好地了解该代码所做的事情并找出为什么message.message undefined有时var vm = new Vue({ // ...your other stuff here... // Computed properties: computed: { messageLines: function() { return (this.message.message || "").split("\n"); } } }); 正在尝试评估那个。

Bill Criswell指出in a comment时,您可能会考虑在模型上使用computed property而不是模板内表达式。 E.g:

v-for="line in messageLines"

然后

f2()

答案 1 :(得分:1)

页面首次加载或message.message更改时的视图加载。

我相信您以错误的方式使用vue数据。

data: function(){
  return {
    message: {}
  }
}

显然,您已在数据中定义了消息属性,但未定义message.message。所以第一次加载时,消息仍然是空的,它仍然没有得到你的ajax响应,所以它告诉message.message是未定义的。您应该将其更改为此,使用嵌套属性来设置合法值。

data: function(){
  return {
    message: {message: ''}
  }
}

您应该了解视图至少渲染2次,第一次使用您在数据中设置的默认值,其他时间更改消息,在ajax回调或其他情况下。

答案 2 :(得分:1)

当vue尝试加载时,

message.message可能不可用。请求vue尝试仅在message.message可用时加载message.message。 以下对我有用。

<div class="Message__body__message" v-if="message.message">
    <p v-for="line in message.message.split('\n')" track-by="$index">{{ line }}<br></p> </div>