vue 应用 object 不是 object 的类型

vue app object is not type of object

我已经开始使用 single-file 组件构建 vue.js 应用 Laravel。问题出在我的应用程序 object 上:它是 DOM,而不是 Vue object,应用程序无法正常工作。

当我启动我的应用程序时,组件正确呈现,vue-devtools 识别 Vue 2.2.6,一切似乎都以正确的方式工作。

但是当我输入时

console.log(app)

在 chrome 控制台中我看到 DOM object:

<div id="app"></div>

此外,当我尝试更改标题 属性(并希望在屏幕上看到更改后的 hello 组件)时,只需键入

app.title = "awesomness"

在控制台中,我的组件不会改变,但只有我的 div#app: (typed console.log(app)

<div id="app" title="awesomness"></div>

问题是:为什么?以下示例。

测试组件Hello.vue

<template>
    <div>
        <p>{{ greeting }} World!</p>
    </div>

<script>
    module.exports = {
        props: ['greeting'],
        data: function() {
            return {
            }
        }
    }
</script>

<style scoped>
    p {
        color: red;
        font-size: 20px;
    }
</style>

我的部分 index/index 来自 laravel 的观点:

<div id="app">
    <hello :greeting="title"></hello>
</div>

最后是我的 /resources/assets/js/app.js 文件

import Vue from 'vue'
import Hello from './components/Hello.vue'

Vue.component('hello', Hello);

var app = new Vue({
    el: '#app',
    data: {
        title: 'Hello Vue!',
        todos: [
            { text: 'task 1' },
            { text: 'task 2' },
            { text: 'task 3' },
            { text: 'task 4' }
        ],
    }
})

在大多数浏览器中,HTML 元素的 id 属性是 exposed in the global scope 作为变量。因此,当您键入 console.log(app) 时,它会返回具有 ID "app" 的元素。

您已使用相同的变量名称为您的 Vue 命名,app。但是您还使用了 var ,这使得它仅限于包含范围(意思是,不是全局变量)。现在,当您使用大多数构建工具(例如 webpack)构建应用程序时,您编写的代码包含在一个包装范围(一个函数)中。因此,您无法全局访问作为 new Vue() 结果的 app 变量。如果你想让它在全球范围内可访问,你可能会写

window.app = new Vue()

但是,您可能也想重命名它。

window.myApp = new Vue()

如果您要为应用程序调用相同的模板。

虽然,你问题的答案是给你的 app 变量一个全局范围

window.app = new Vue({...});

您的 Chrome 浏览器中有 Vue devtools 扩展吗?如果没有,请安装它。安装后,为了调试,现在可以将我的 Vue 实例命名为 window.app。这里有一个link,你会发现它真的很有用。

https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=en