The CLI should have created a file called main.js. In there you’ll have something a bit like this that creates a new Vue instance:
new Vue({
render: h => h(App)
}).mount('#app')
It might use an el property instead of calling mount and it may mention store or router if you chose to include those when creating the project. It doesn’t really matter, the key thing is that this is where the root Vue instance gets created. Unless you’re writing an atypical application you shouldn’t need to use new Vue again. You certainly shouldn’t be using it inside a .vue file.
The App referenced in the code I wrote above should be the component in App.vue, which should be imported earlier in main.js.
Then there’s your App.vue. This line is a bit odd:
import App from './components/Navigation-Drawer.vue'
Technically it isn’t wrong but it’s really confusing. Rename App to some a bit more sensible, like NavigationDrawer. You’ll need to update everywhere it’s used, including the template.
Next up, Navigation-Drawer.vue. There are several problems here.
Firstly, get rid of the id="app" on the template, that just shouldn’t be there and may cause problems.
To implement onclick="openNav()" in Vue you’d instead write @click="openNav" and then define openNav within the methods section of the component.
The script section should look something like this:
<script>
export default {
name: 'NavigationDrawer',
props: {
msg: String
},
// Note that this is a function when used on a component
data () {
return {
name1: 'name 1',
name2: 'name 2',
name3: 'name 3',
name4: 'name 4'
}
},
methods: {
openNav() {
console.log('openNav called')
},
closeNav() {
console.log('closeNav')
}
}
}
</script>
Hopefully that’ll be enough to get it all working.
The original linting errors were caused because:
- You were creating a variable called
appbut never using it. - You were trying to call
new Vuebut hadn’t importedVue. In general you need to import things if you want to be able to access them from inside a.vuefile.
However, the linting errors were just side-effects of the more serious problems I’ve outlined above.
**»10:7 error ‘app’ is assigned a value but never used no-unused-vars»
I know there is some similar question due this. But I dont know why my code doesnt work at all.
So the error is at the main.js file line 10.
I thought I’m using my «app» with el:’app’ or in export fault with ‘app’
I have 2 files
**App.vue:****
<template>
<div id="app" v-cloack>
<img src="./assets/999.jpg">
<h1>{{ msg }}</h1>
<ul>
<input type="file" ref="myFile" @change="selectedFile"><br/>
<textarea v-model="text"></textarea>
</div>
</template>
<script>
//import HelloWorld from './components/HelloWorld';
//import main from './main.js';
export default {
name: 'app',
data: ()=> {
//
return{
msg: 'Datei uploaden'
}
},
}
</script>
<style>
</style>'''
**main.js:**
import Vue from 'vue'
import App from './App.vue'
import vuetify from './plugins/vuetify';
Vue.config.productionTip = false
Vue.config.devtools = false;
export default {
name: 'app',
data: ()=> {
var app;
app =new Vue({
el: '#app',
vuetify,
render: h => h(App),
data: {
text:''
},
methods:{
selectedFile() {
console.log('selected a file');
console.log(this.$refs.myFile.files[0]);
let file = this.$refs.myFile.files[0];
if(!file || file.type !== 'text/plain') return;
// Credit: https://stackoverflow.com/a/754398/52160
let reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = evt => {
this.text = evt.target.result;
}
reader.onerror = evt => {
console.error(evt);
}
}
}
})
}
}
//.$mount('#app')
I really struggle since a few days. I would be very happy if anybody can help
Thanks
asked Apr 15, 2020 at 18:48
1
You can add /* exported variableName */ to ignore the eslint since you are using app variable outside your file
so above your app variable add /* exported app */
to read more https://eslint.org/docs/rules/no-unused-vars
Change main.js to this code
import Vue from 'vue'
import App from './App.vue'
import vuetify from './plugins/vuetify';
Vue.config.productionTip = false;
Vue.config.devtools = false;
var app = new Vue({
el: '#app',
vuetify,
render: h => h(App),
data: {
text: ''
},
methods: {
selectedFile() {
console.log('selected a file');
console.log(this.$refs.myFile.files[0]);
let file = this.$refs.myFile.files[0];
if (!file || file.type !== 'text/plain') return;
// Credit: https://stackoverflow.com/a/754398/52160
let reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = evt => {
this.text = evt.target.result;
}
reader.onerror = evt => {
console.error(evt);
}
}
}
})
export default app
answered Apr 15, 2020 at 18:58
QuantumassQuantumass
8066 silver badges11 bronze badges
Банальный пример {{ message }} (в дивах с id="app")
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
Не работает из за конфликта (я так понимаю конфликт в виде переменной {{ message }}) vue и laravel, как это исправить?
-
Вопрос заданболее трёх лет назад
-
425 просмотров
Пригласить эксперта
{
data:{…},
…,
delimiters:[«[[«,»]]»]
}
Или можете добавить @ перед vue переменной, но на самом деле это все извращения.
Используйте vue компоненты и vue template в нем, передавая нужные переменные в компоненты через props или api.
-
Показать ещё
Загружается…
29 янв. 2023, в 03:07
300000 руб./за проект
29 янв. 2023, в 02:16
700000 руб./за проект
29 янв. 2023, в 01:54
5000 руб./за проект
Минуточку внимания

Vue.js
-
Обучение
-
Документация
-
- Руководство
- API
- Рекомендации
- Примеры
- Книга рецептов
-
Видео курсы
-
-
Vue Mastery
-
Vue School
-
-
-
Экосистема
-
Помощь
-
- Форум
- Чат
- Митапы
-
Инструментарий
-
- Инструменты разработчика
- Vue CLI
- Vue Loader
-
Официальные плагины
-
- Vue Router
- Vuex
- Vue Server Renderer
-
Новости
-
- Еженедельные новости
- Roadmap
- События
- Блог
- Вакансии
- Сообщество разработчиков
-
- Команда
-
Ресурсы
- Партнёры
- Темы
- Awesome Vue
- Найти пакеты для Vue
-
Поддержать Vue
- Единоразовые пожертвования
- Повторяющиеся взносы
- Магазин футболок
-
Переводы
- English
- 中文
- 日本語
- 한국어
- Português
- Français
- Tiếng Việt
- Español
- Bahasa Indonesia
Эта документация для версий v2.x и ранее.
Для v3.x, документация на русском здесь.
Экземпляр Vue
Создание экземпляра Vue
Каждое приложение начинается с создания нового экземпляра Vue с помощью функции Vue:
var vm = new Vue({
// опции
})
Хоть Vue и не реализует паттерн MVVM в полной мере, архитектура фреймворка им во многом вдохновлена. Поэтому переменную с экземпляром Vue традиционно именуют vm (сокращённо от ViewModel).
При создании экземпляра Vue необходимо передать объект опций. Большая часть этого руководства посвящена описанию, как можно использовать эти опции для достижения желаемого поведения. Полный список опций можно посмотреть в справочнике API.
Приложение Vue состоит из корневого экземпляра Vue, создаваемого с помощью new Vue, опционально организованного в дерево вложенных, повторно используемых компонентов. Например, дерево компонентов для приложения TODO-списка может выглядеть так:
Корневой экземпляр
└─ TodoList
├─ TodoItem
│ ├─ TodoButtonDelete
│ └─ TodoButtonEdit
└─ TodoListFooter
├─ TodosButtonClear
└─ TodoListStatistics
Подробнее о системе компонентов мы поговорим позднее. А сейчас запомните, что все компоненты Vue также являются экземплярами Vue и поэтому принимают такой же объект опций (за исключением нескольких специфичных для корневого).
Данные и методы
Когда экземпляр Vue создан, он добавляет все свойства, найденные в опции data, в систему реактивности Vue. Поэтому представление будет «реагировать» на их изменения, обновляясь в соответствии с новыми значениями.
// Наш объект data
var data = { a: 1 }// Объект добавляется в экземпляр Vue
var vm = new Vue({
data: data
})
// Получение свойства из экземпляра
// возвращает то же значение из исходных данных
vm.a === data.a // => true
// Изменение свойства экземпляра
// влияет на оригинальные данные
vm.a = 2
data.a // => 2
// ... и наоборот
data.a = 3
vm.a // => 3
Когда значения изменяются, представление будет переотрисовано. Но обратите внимание, свойства в data будут реактивными, только если они существовали при создании экземпляра. Это значит, если добавить новое свойство, например:
vm.b = 'hi'
То изменения в b не будут вызывать никаких обновлений. Если вы знаете, что свойство вам понадобится позже, но изначально оно пустое или несуществующее, нужно просто установить начальное значение. Например:
data: {
newTodoText: '',
visitCount: 0,
hideCompletedTodos: false,
todos: [],
error: null
}
Единственным исключением здесь является использование Object.freeze(), который предотвращает изменение существующих свойств, что также означает невозможность отслеживать изменения системой реактивности.
var obj = {
foo: 'bar'
}Object.freeze(obj)
new Vue({
el: '#app',
data: obj
})
<div id="app">
<p>{{ foo }}</p>
<!-- мы теперь не можем обновить `foo`! -->
<button v-on:click="foo = 'baz'">Изменить</button>
</div>
Кроме свойств объекта data, экземпляры Vue предоставляют ряд служебных свойств и методов экземпляра. Их имена начинаются с префикса $, чтобы отличаться от пользовательских свойств. Например:
var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
})vm.$data === data // => true
vm.$el === document.getElementById('example') // => true
// $watch — это метод экземпляра
vm.$watch('a', function (newValue, oldValue) {
// Этот коллбэк будет вызван, когда изменится `vm.a`
})
С полным списком свойств и методов экземпляра Vue можно ознакомиться в справочнике API.
Хуки жизненного цикла экземпляра
Каждый экземпляр Vue при создании проходит через последовательность шагов инициализации — например, настраивает наблюдение за данными, компилирует шаблон, монтирует экземпляр в DOM, обновляет DOM при изменении данных. Между этими шагами вызываются функции, называемые хуками жизненного цикла, с помощью которых можно выполнять свой код на определённых этапах.
Например, хук created можно использовать для выполнения кода после создания экземпляра:
new Vue({
data: {
a: 1
},
created: function () {
// `this` указывает на экземпляр vm
console.log('Значение a: ' + this.a)
}
})
// => "Значение a: 1"
Существуют и другие хуки, вызываемые на различных стадиях жизненного цикла экземпляра, например mounted, updated и destroyed. Все хуки вызываются с контекстной переменной this, ссылающейся на вызывающий экземпляр Vue.
Не используйте стрелочные функции в свойствах экземпляра и в коллбэках, например created: () => console.log(this.a) или vm.$watch('a', newVal => this.myMethod()). Так как стрелочные функции не имеют собственного this, то this в коде будет обрабатываться как любая другая переменная и её поиск будет производиться в областях видимости выше до тех пор пока не будет найдена, часто приводя к таким ошибкам, как Uncaught TypeError: Cannot read property of undefined или Uncaught TypeError: this.myMethod is not a function.
Диаграмма жизненного цикла
Ниже представлена диаграмма жизненного цикла экземпляра. Необязательно понимать её полностью прямо сейчас, но по мере изучения и практики разработки к ней полезно будет обращаться.

Project scenario:
Today, in the process of reviewing the basis of Vue, I tried to introduce and use Vue with traditional HTML and native memory, and then found that I really pulled it. The memory is not only vague, but also confused. Vue2 mixed with vue3 is there! Next, let’s see how to report the error.
Problem Description:
The HTML structure is as follows:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
</head>
<body>
<div id="app"></div>
</body>
<script>
const app = Vue.createApp({
data() {
return {
message: '666'
}
},
template: "<h2>{{message}}</h2>"
})
app.mount("#app")
</script>
</html>
Good guy, 666 didn’t render. Just click and report me the error
Uncaught TypeError: Vue.createApp is not a function。
I’m still wondering. I think it’s ok if createapp creates a Vue application and mount it to the node?Why, vue.createapp is not available yet
![]()
Cause analysis:
Later, I read the document and found that I had mixed up vue.createapp and mount, which are the writing methods of vue3, but I introduced vue2
it is clearly written on the official website. Vue2 uses new and is an EL mount node
vue2 is written as follows:
var app = new Vue({
el: '#app',
data: {
message: '666',
},
template: '<h2>{{message}}</h2>',
});
The following is the way vue3 is written
const app = Vue.createApp({
data() {
return {
message: '666'
}
},
template: "<h2>{{message}}</h2>"
})
app.mount("#app")
Read More:
Я работаю с Vue.js, и он по какой-то причине просто перестал работать. Кажется, я не могу найти свою ошибку — смотрел на нее часами.
Это мой HTML-файл — просто зависимости и таблица, отображающая данные в users.
<!DOCTYPE html>
<html>
<head>
<title>Hello, world!</title>
</head>
<body>
<script
src = "https://code.jquery.com/jquery-3.3.1.min.js"
type = "text/javascript">
</script>
<link
href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
rel = "stylesheet"
>
<script
src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
type = "text/javascript">
</script>
<script
src = "https://cdn.jsdelivr.net/npm/vue"
type = "text/javascript">
</script>
<script src = "/js/app.js" type = "text/javascript"></script>
<div class = "container">
<div id = "app">
<table class = "table">
<thead>
<tr>
<th>Name</th>
<th>Personal Number</th>
<th>Volcano Amount</th>
</tr>
</thead>
<tbody>
<tr v-for = "user in users">
<td><% user.name %></td>
<td><% user.personal_number %></td>
<td><% user.volcano_amount %></td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
И это файл app.js, который просто запускает экземпляр Vue, создает массив users и выполняет запрос AJAX, который обновляет массив users.
var app = new Vue({
el: '#app',
data: {
users: []
},
mounted: function() {
var vue_object = this;
$.getJSON('users', function(data) {
vue_object.users = data;
});
},
delimiters: ['<%', '%>']
});
Результат крайне неутешительный — все в простом HTML. В таблице 2 строки — заголовок и строка с <% user.xxx %>, как будто Vue не существует.
Я предполагаю, что это означает, что что-то не работает, хотя сам app.js запускается (я пробовал добавить console.info, и он распечатал)
Надеюсь, у вас есть хорошие идеи 🙂
В настоящее время я пытаюсь создать компонент Vue.js. Когда я запускаю приложение, появляется ошибка. Сообщение об ошибке, как показано ниже:

<template>
<div class="hello" id="app">
<span style="font-size:30px;cursor:pointer;" onclick="openNav()">☰</span>
<div id="mySidenav" class="sidenav">
<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
<a href="#">{{name1}}</a>
<a href="#">{{name2}}</a>
<a href="#">{{name3}}</a>
<a href="#">{{name4}}</a>
<div id="bottom">
<input v-model="name1" style="margin-left: 25px;max-width: 50%;">
<input v-model="name2" style="margin-left: 25px;max-width: 50%;">
<input v-model="name3" style="margin-left: 25px;max-width: 50%;">
<input v-model="name4" style="margin-left: 25px;max-width: 50%;">
</div>
</div>
<h2>Lorem ipsum dolor sit amet</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque elit velit, dictum in urna et,
vulputate ornare sapien. Phasellus sed metus sed dolor hendrerit iaculis.
Cras eget libero sit amet massa aliquet dignissim. Vivamus faucibus lorem sit amet semper luctus.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In at placerat
felis,
id finibus mauris. Proin maximus orci quis lacus pellentesque, ac dignissim sapien vestibulum. Maecenas
pharetra
vulputate semper.
Suspendisse potenti. Donec nisi nisi, aliquam eget felis euismod, semper dictum ligula.
Aenean mauris enim, iaculis vel malesuada vel, pulvinar et risus. Fusce sit amet orci eget diam commodo
ultricies sed vel elit.
Curabitur quis scelerisque est.</p>
</div>
</template>
<script>
//Vue App
var app = new Vue({
el: '#app',
data: {
/*
navlink: [
{id: 1, link: "https://www.tfbern.ch"},
{id: 2, link: "https://www.tfbern.ch"},
{id: 3, link: "https://www.tfbern.ch"},
{id: 4, link: "https://www.tfbern.ch"}
]
*/
name1: 'name 1',
name2: 'name 2',
name3: 'name 3',
name4: 'name 4'
}
})
export default {
name: 'NavigationDrawer',
props: {
msg: String
}
}
//Navbar Animation
/*
function openNav() {
document.getElementById("mySidenav").style.width = "250px";
}
function closeNav() {
document.getElementById("mySidenav").style.width = "0"; -->
}
*/
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
Навигационно- Drawer.vue
<template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<App msg="test">
</div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
import App from './components/Navigation-Drawer.vue'
export default {
name: 'App',
components: {
HelloWorld,
App
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
App.vue
2 ответа
Лучший ответ
Это ошибки от Eslint. См. https://eslint.org/docs/rules/no-unused-vars и https://eslint.org/docs/rules/no-undef для деталей.
Чтобы удалить эти ошибки, добавьте эту строку непосредственно перед строкой, в которой вы инициализируете приложение.
// eslint-disable-next-line
var app = new Vue({
// rest of the code
Убедитесь, что строка с eslint-disable-next-line закомментирована. Это скажет эслинту игнорировать эту строку, а не задерживать ее.
1
Albert Pinto
17 Фев 2020 в 10:28
CLI должен был создать файл с именем main.js. Там у вас будет что-то вроде этого, создающее новый экземпляр Vue:
new Vue({
render: h => h(App)
}).mount('#app')
Он может использовать свойство el вместо вызова mount и может упоминать store или router, если вы решили включить их при создании проекта. Это не имеет значения, главное, что именно здесь создается корневой экземпляр Vue. Если вы не пишете нетипичное приложение, вам не нужно использовать new Vue снова. Вы, конечно, не должны использовать его внутри .vue файла.
App, указанный в коде, который я написал выше, должен быть компонентом App.vue, который должен быть импортирован ранее в main.js.
Тогда есть твой App.vue. Эта строка немного странная:
import App from './components/Navigation-Drawer.vue'
Технически это не так, но это действительно сбивает с толку. Переименуйте App в более разумное, например, NavigationDrawer. Вам нужно будет обновлять везде, где он используется, включая шаблон.
Далее Navigation-Drawer.vue. Здесь есть несколько проблем.
Во-первых, избавьтесь от id="app" в шаблоне, который просто не должен присутствовать и может вызвать проблемы.
Чтобы реализовать onclick="openNav()" в Vue, вместо этого вы должны написать @click="openNav", а затем определить openNav в разделе methods компонента.
Секция скрипта должна выглядеть примерно так:
<script>
export default {
name: 'NavigationDrawer',
props: {
msg: String
},
// Note that this is a function when used on a component
data () {
return {
name1: 'name 1',
name2: 'name 2',
name3: 'name 3',
name4: 'name 4'
}
},
methods: {
openNav() {
console.log('openNav called')
},
closeNav() {
console.log('closeNav')
}
}
}
</script>
Надеюсь, этого будет достаточно, чтобы все заработало.
Первоначальные ошибки распечатки были вызваны тем, что:
- Вы создавали переменную с именем
app, но никогда не использовали ее. - Вы пытались позвонить
new Vue, но не импортировалиVue. В общем, вам нужно импортировать вещи, если вы хотите иметь доступ к ним из файла.vue.
Однако ошибки в связывании были лишь побочными эффектами более серьезных проблем, которые я изложил выше.
0
skirtle
19 Фев 2020 в 15:23
I got the same error. I declared metadata as @leonardovilarinho suggested, but it still get the same error.
Here is my router:
var router = new VueRouter({
mode: 'history',
base: '/account/',
linkActiveClass: 'active',
meta: {
permission: 'any',
fail: '/',
},
routes: [
{
path: '/contribution',
component: contribution,
meta: {
permission: 'any',
fail: '/',
},
},
{
path: '/deposits',
component: deposits,
meta: {
permission: 'any',
fail: '/',
},
},
{
path: '/withdraw',
component: withdraw,
meta: {
permission: 'any',
fail: '/',
},
},
{
path: '/settings',
component: settings,
meta: {
permission: 'any',
fail: '/',
},
}
]
});
And this is how I add it:
var app = new Vue({
el: '#app',
router: router,
......
Any ideas?
#javascript #vue.js #vuejs2
Вопрос:
Я пытаюсь начать использовать vue.js и возникли проблемы с его настройкой. В моем пакете.json я установил последнюю версию "vue": "^2.6.14", , и в моей main.js папке я включил вот так
import Vue from "vue";
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
и в свой html-файл я добавил это:
<div id="app">
{{ message }}
</div>
когда webpack компилируется, он создает это main.js файл, но {{ сообщение }} не изменен на Hello Vue!. Что я здесь делаю не так, что это не работает?
Также в инструментах разработки не отображается ошибка.
Комментарии:
1. возможно, вам захочется переместить свойство данных и шаблон=
{{message}}вApp.vueвместоmain.jsиindex.html.2. Проверьте консоль инструментов разработки вашего браузера на наличие ошибок
3. @Фил спасибо, но никакой ошибки там нет
4. Вам придется пройти все шаги, которые вы предпринимаете… как вы начали проект? Вы используете Vue CLI? Какие команды вы используете для запуска или создания своего проекта? Какой адрес вы открываете в своем браузере?
5. Как вы можете видеть здесь , ваш код работает просто отлично
Ответ №1:
Попробуй
import Vue from "vue";
var app = new Vue({
el: '#app',
data () {
return {
message: "Hello Vue!"
}
}
}).$mount('#app');
Это решило бы вашу проблему
Комментарии:
1. где бы я это добавил? до конца файла?
2. Я отредактировал свой ответ, вам нужно заменить объект данных для работы
Ответ №2:
import Vue from "vue";
new Vue({
data() {
return {
message: 'Hello Vue!',
};
},
}).$mount('#app');
Комментарии:
1. к сожалению, по-прежнему ничего не показывает, я также добавил
window.Vue = Vue;, но ничего не отображается2. Вы уверены, что включаете файл js в свой html..
3. да, я проверил исходный код и main.js загружено — это тот контент, который я опубликовал в вопросе.
4. Да, братан, ты не включил свой js-файл в html. работает нормально. codepen.io/pen/?editors=1111