Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2020, 14:58
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Не всплывает событие в Vue
Привет.
Как понять такую логику, что внутри компонента blog-post генерируется событие:
<button v-on:click="$emit('enlarge-text')"


Но до верхнего компонента оно само не поднимется.

Надо обязательно НА НЕМ же и ловить и отправлять выше
<blog-post v-bind:title="title" v-on:enlarge-text="methodClick1" />
  methods: {
	methodClick1: function(){
		this.$emit('enlarge-text');
	}
  }


Чем такая логика может быть объяснена?

Вот полный код:

<!DOCTYPE html>
<html>
<head>
		     
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<script src="resources/vue/vue.js"></script>

<style>
table, th, td {
  border: 1px solid black;
}
</style>

</head>
<body>
<div id="app">
	<div v-bind:style="{ fontSize: postFontSize + 'em' }">
	<main-content :title="title" v-on:enlarge-text="postFontSize += 0.1"></main-content>
	</div>
</div>


</body>
<script>

Vue.component('blog-post', {
  props: ['title'],
  template: 
`<div>
  <h3>{{ title }}</h3>
  <button v-on:click="methodConsole">Консоль</button>
  <button v-on:click="$emit('enlarge-text')">Увеличить размер текста</button>
  
</div>`,
  data: function(){
	return {
		
	};
  },
  methods: {
	methodConsole: function(){
		console.log(this.title);
		console.log(this);
	}
  }
}) 

Vue.component('main-content', {
	props: ['title', 'prop2'],
  template: 
`<div>
  
  <blog-post v-bind:title="title" v-on:enlarge-text="methodClick1" />
  <!-- просто нельзя оставить 
  <blog-post v-bind:title="title" />
  -->
</div>`,
  methods: {
	methodClick1: function(){
		//console.log(this.title);
		//console.log(this);
		this.$emit('enlarge-text');
	}
  }	
});

  
var app =  new Vue({
    el: "#app",
    components: {},
    data() {
      return {
        postFontSize: 1,
		title: 'my title 2',
      }
    },
	methods: {
		reduceText: function($event) {
			this.postFontSize -= $event;
		}
	}
  });
</script>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 26.05.2020, 14:00
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

только родителю может отсылать сообщение/событие
Ответить с цитированием
  #3 (permalink)  
Старый 28.05.2020, 08:43
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,578

Скажите, вот в доках
Родительский компонент может прослушивать любые события на экземпляре дочернего компонента с помощью v-on, как мы это делаем с нативными событиями DOM
<blog-post
  ...
  v-on:enlarge-text="postFontSize += 0.1"
></blog-post>

Что здесь имеют ввиду под Родительский компонент ?
Тот компонент в который вложен <blog-post>?
И это вот он разместив v-on:enlarge-text на <blog-post> прослушивает события от <blog-post>?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Локальное подключение компонентов vue? Lodas Библиотеки/Тулкиты/Фреймворки 0 11.04.2020 22:42
Событие hover hfts_rider Events/DOM/Window 10 16.10.2014 11:51
Событие на input radio redwert Элементы интерфейса 3 23.09.2014 09:45
Событие click Гробовщик jQuery 1 31.07.2013 07:28
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46