Форум программистов, компьютерный форум, киберфорум
Vue.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722

VueJS. Запустить функцию родительского компонента из дочернего

13.03.2018, 16:19. Показов 4943. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня постоянно возникают новые вопросы. Ещё один маленький вопрос

Хочу сделать счётчик вызова v-for, пишу

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<div id="main" class="pr z0 disf fdc fjcc faic">
    <div id="price">
        <list_table v-bind:lists="lists" v-bind:inc="increment"></list_table>
    </div>
</div>
 
<template id="listTableTemplate">
    <ul>
        <li v-for="(list, index) in lists">
            {{ inc() }}
        </li>
    </ul>
</template>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    var lists = <?php echo json_encode($arr, JSON_PRETTY_PRINT) ?>;
    
    Vue.component('list_table', {
        template: '#listTableTemplate',
        props: ['lists', 'inc']
    })
        
    var vm = new Vue({
        el: '#price',
        data: {
            lists,
            counter: 0
        },
        methods: {
            increment() { 
                this.counter++;
            }
        }
    })
Пишет infinity loop, мне как то бы функции запускать из парента, возможно ли? Не могу нагуглить, точнее незнаю что именно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2018, 16:19
Ответы с готовыми решениями:

Как из документа в запустить функцию в родительского окна?
На странице есть iFrame. В нем загружен документ. Как например на mouseover в загруженном документе запустить функцию родительской страницы?

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса?
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и вызывается в его конструкторе (камень...

Объединение дочернего и родительского документа
Подскажите, пожалуйста, по следующей ситуации: у каждого родительского докумена есть один дочерний. От дочернего решили отказаться - его...

4
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
13.03.2018, 16:55
Можно послать событие паренту. Но infinite update loop возникает потому что вы пытаетесь изменить свойства родителя, из функции рендера чайлда => что вызовет ререндер чайлдов родителя и всё по кругу. Смотрите в примере на счетчик:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="main" class="pr z0 disf fdc fjcc faic">
  <div id="price">
    <list_table :lists="lists" @inc="onInc"></list_table>
    <h3>
     Total {{counter}}
    </h3>
  </div>
</div>
 
<script type="text/x-template" id="listTableTemplate">
  <ul>
    <li v-for="(list, index) in lists">
      {{ inc(index) }}
    </li>
  </ul>
</script>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var lists = ['a', 'b', 'c', 'd', 'e'];
 
Vue.component('list_table', {
  template: '#listTableTemplate',
  props: ['lists'],
  methods: {
    inc(i) {
        this.$emit('inc');
      return this.lists[i];
    }
  }
});
 
var vm = new Vue({
  el: '#price',
  data: {
    lists,
    counter: 0
  },
  methods: {
    onInc() {
      this.counter++;
    }
  }
});
https://jsfiddle.net/du18ccLc/

Вам надо пересмотреть структуру своего приложения.
1
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722
14.03.2018, 10:14  [ТС]
прошу прощения, возможно я уже вам надоел, но ни как не могу понять проблему инфинити лупа, вообще никак, вроде бы всё логично

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div id="main" class="pr z0 disf fdc fjcc faic">
    <div id="price">
        <list_table v-bind:lists="lists" v-bind:counter="counter" v-on:increment="increment"></list_table>
    </div>
</div>
 
<script type="text/x-template" id="listTableTemplate">
    <ul>
        <li v-for="(list, index) in lists">
            {{ list[0] }}
            {{ counter }}
            {{ changecolor() }}
        </li>
    </ul>
</script>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script>
    var lists = <?php echo json_encode($arr, JSON_PRETTY_PRINT) ?>;
    
    Vue.component('list_table', {
        template: '#listTableTemplate',
        props: ['lists', 'counter', 'increment'],
        methods: {
            changecolor: function(){
                this.$emit('increment')
            }
        }
    })
        
    var vm = new Vue({
        el: '#price',
        data: {
            lists,
            counter: 0
        },
        methods: {
            increment: function(){
                this.counter += 1
            }
        }
    })
</script>
Максимально простой пример, у меня v-for вызываеться 10 раз и 10 раз он показывает состояние счётчика а затем его меняет, пишет инфинити луп. Зачем я это делаю? Мне нужно к примеру лист поделить на чёт нечет, и когда чётное значение index тогда применяется один CSS стиль, в противном случае другой. Я пытаюсь сделать тригер-переменную, каждый раз которая была либо true либо false. Но каждый раз когда я вызываю функцию из v-for получаеться проблема.
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
14.03.2018, 11:20
Цитата Сообщение от zasadadada Посмотреть сообщение
Мне нужно к примеру лист поделить на чёт нечет, и когда чётное значение index тогда применяется один CSS стиль, в противном случае другой.
А почему этим у вас занимается основное приложение? Зачем вам тогда компонент? Пусть компонент сам себе стили и рисует в зависимости от индекса.
1
81 / 40 / 22
Регистрация: 03.05.2013
Сообщений: 722
14.03.2018, 11:59  [ТС]
спасибо, работает, что бы убрать инфинити луп, пришлось создавать второй компонент
Кликните здесь для просмотра всего текста

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="main" class="pr z0 disf fdc fjcc faic">
    <div id="price">
        <list_table v-bind:lists="lists"></list_table>
    </div>
</div>
 
<script type="text/x-template" id="listTableTemplate">
    <ul>
        <li v-for="(list, index) in lists">
            <list_row v-bind:increment="index">{{ list[0] }}</list_row>
        </li>
    </ul>
</script>
 
<script type="text/x-template" id="listRowTemplate">
    <div v-bind:class="{ bcg01: isGrey, bcr01: isRed }" v-on:click="setclickcolor" class="curspoi">
        {{setevencolor(increment)}}
        <slot></slot>
    </div>
</script>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    var lists = <?php echo json_encode($arr, JSON_PRETTY_PRINT) ?>;
    
    Vue.component('list_table', {
        template: '#listTableTemplate',
        props: ['lists', 'counter', 'increment']
    })
    
    Vue.component('list_row', {
        template: '#listRowTemplate',
        props: ['increment'],
        data: function () {
          return {
            isGrey: false,
            isRed: false
          }
        },
        methods: {
            setevencolor: function(increment){
                if(increment%2){
                    this.isGrey = true
                }
            },
            setclickcolor: function(){
                this.isRed = !this.isRed
            }
        }
    })
    
    var vm = new Vue({
        el: '#price',
        data: {
            lists,
        }
    })
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2018, 11:59
Помогаю со студенческими работами здесь

Завершение родительского процесса из дочернего
Всем доброго времени суток. Мне нужно из дочернего процесса закрыть родительский, но ничего не выходит. Вот исходник дочернего ...

Ссылка на метод дочернего класса из родительского
Всем привет! Я новичок в C++. Помогите, пожалуйста, сослаться из родительского класса на метод, реализованный в дочернем классе, и,...

Разделение сетей родительского и дочернего роутеров
Доброго времени суток. Сразу извиняюсь за нубский вопрос. Есть Роутер1(назовем его родительским), который подключен к интернету по...

Ширина дочернего элемента больше родительского
Реализовывал &quot;прогрессбар&quot; путём увеличивающего ширину прямоугольника одного цвета на фоне другого прямоугольника шириной в 100%. В конце...

Доступ к полям дочернего класса из родительского
Вопрос это нормально что this.GetType() Возвращает тип дочернего класса а не родительского? А следовательно я могу перебрать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru