【问题标题】:How to push data to vue instance如何将数据推送到 vue 实例
【发布时间】:2020-07-23 19:01:52
【问题描述】:

我有一个简单的 vue 实例,我希望将空数组作为 data.vueFlashes。:

const app = new Vue({
    el: '#app',
    data: {
        vueFlashes: []
    }
});

组件定义如下:

<template>
    <transition name="fade">
        <div id="flash-component" v-show="visible">
            <span class="hide" @click="hide()">X</span>
            {{message.message}}
        </div>
    </transition>
</template>

<script>
    export default {
        mounted: function() {
            console.log('VUE component mounted.')
        },

        created: function()
        {
            this.show();
        },

        props: [
            'message'
        ],

        data: function() {
            return {
                visible: true
            }
        },

        methods: {
            show: function()
            {
                this.visible = true;
                setTimeout(() => this.hide(), 5000);
            },
            hide: function()
            {
                this.visible = false;
            }
        }
    }
</script>

然后我想用这种方式从外部填充 vueFlashes:

// This is Laravel blade template
<script>
...
@foreach (session('flash_notification', collect())->toArray() as $message)
    app.vueFlashes.push( {!! json_encode($message) !!} );  // Error
@endforeach
... 

但它给我一个错误:无法读取未定义的属性'push' 如果我使用临时 js 数组,然后将其分配给 app.vueFlashes 它可以工作:

<script>
...
let jsFlashes = [];
@foreach (session('flash_notification', collect())->toArray() as $message)
    // jsFlashes.push( {!! json_encode($message) !!} );
@endforeach

app.vueFlashes = jsFlashes;  // This works fine

这两种调用同一个 app.vueFlashes 值的方法有什么区别?

【问题讨论】:

  • @foreach 来自哪里?
  • 它是 Laravel 刀片模板。代码中有注释。

标签: javascript vue.js push


【解决方案1】:
<ul id='app'>

  <li v-for='flashMessage in flashMessages'>
    {{flashMessage}}
  </li>

</ul>

.

const app = new Vue({
  el: '#app',
  data() {
    return {
      flashMessages: [
        "Hellow. Something is wrong!",
        "Another message",
      ],
    };
  },
});


app.flashMessages.push("A message from Push");

这是一个最小的可行示例:https://jsfiddle.net/sheriffderek/fyb0j5rt/

您需要缩小范围。

它告诉你app.vueFlashes 是未定义的。这可能是因为它在不同范围内的某个地方......或某事/但错误是真实的 - 所以,听听 - 并追踪为什么它没有在你使用它的地方定义。

【讨论】:

  • 我有两个脚本。首先定义 const app = new Vue,第二个脚本调用 app const 但它没有定义。 Console.log() 表示第一个脚本应用程序是 vue 实例,而在第二个 console.log() 中,应用程序是未定义的。怎么样?
  • 也许在您尝试使用它之后肯定会出现?也许在不同的范围内?它们都在窗户上吗?他们是否经历了构建过程?也许在每个旁边放一个 console.time - 看看什么顺序?真的很难回答这样的问题 - 当我们在这里只有一点文字时......而且你有一个更大的应用程序。
  • 因此,实例化 app 变量的 Laravel app.js 似乎确实在它自己的范围内。当我写 window.app = new Vue() 时,它可以工作。有点凌乱的 app.js 真的很大......感谢范围建议的帮助。
猜你喜欢
  • 2018-03-06
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2018-06-25
  • 2017-09-12
  • 2020-03-25
  • 2017-04-17
相关资源
最近更新 更多