Laravel по-русски
      
      
    Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет, 
Делая статусную строку внизу приложения(laravel5.5/vue.js2.5) в конце блока обработки vue вставил компонент:
resources/views/layouts/app.blade.php
    <div id="app">
        ...
        @yield('content')
        ...
        <status-line></status-line>
    </div> <!-- id="app">-->В resources/assets/js/components/lib/StatusLine.vue при клике на кнопке(метод viewAssigningTasks) считываю данные в массив assigningTasksListing с сервера 
и передаю в событие setAssigningTasksListingEvent полученные данные. Кроме массива передаю две скалярные переменные(title и body) для примера.
 В компоненте модального окна StatusLine.vue слушаю событие setAssigningTasksListingEvent и в его обработчике открываю модальное окно присваиванием :
 this.show_new_tasks_modal_modal= true;Шаблон темплейта заполняю как строку, предварительно в переменной сформировав цикл для всех строк assigningTasksListing, что я хотел отобразить :
    var  assigningTasksListingHTML=
        '<div class="row"> assigningTasksListing::{{ assigningTasksListing }}<br><br><hr> <ul><li v-for="nextAssigningTask,index in assigningTasksListing">{{nextAssigningTask.id}}={{nextAssigningTask.task_name}} of </li></ul></div>';
    console.log("-2 assigningTasksListingHTML:::")
    console.log(assigningTasksListingHTML)
    Vue.component('newTasksModalDialog', {
        template: '\n' +
...Итого  модально окно открывается и выводится  массив assigningTasksListing который я вывожу на экран
Инпуты со значениями title и body выводятся правильно, но не работает вывод массива assigningTasksListing в цикле.
Просто переменные в цикле не выводятся. На странице есть один вывод :
= of - это константы что я вывожу между переменными. Если в цикле написать неправильную переменную - то в консоле куча ошибок.
Это как-то можно исправить ?
Ниже шаблон компонента:
<template>
	<div class="row">
		...
			<span v-if="assigning_tasks_count > 0">
			| <i class="glyphicon glyphicon-tasks red"></i> <a href="#"  @click.prevent="viewAssigningTasks">{{ assigning_tasks_count }} New tasks</a>
			</span>
		...
		<newTasksModalDialog v-show="show_new_tasks_modal_modal" @close="show_new_tasks_modal_modal = false" bus="bus">
			<h4 slot="header">New tasks assigned to you</h4>
			<p slot="footer" class="text-info">You have to accept or cancel these tasks</p>
		</newTasksModalDialog>
	</div>
</template>
<script>
    import {bus} from '../../app';
    // DEFINE THE NEW TASKS MODAL DIALOG COMPONENT START
    var  assigningTasksListingHTML=
        '<div class="row"> assigningTasksListing::{{ assigningTasksListing }}<br><br><hr> <ul><li v-for="nextAssigningTask,index in assigningTasksListing">{{nextAssigningTask.id}}={{nextAssigningTask.task_name}} of </li></ul></div>';
    console.log("-2 assigningTasksListingHTML:::")
    console.log(assigningTasksListingHTML)
    Vue.component('newTasksModalDialog', {
        template: '\n' +
        '    <div class="modal-mask"  @click="close"    >\n' + // v-show="show"
        '      <div class="modal-wrapper" >\n' +
        '        <div class="modal-container" @click.stop>\n' +
        '\n' +
        '          <div class="modal-header">\n' +
        '            <slot name="header">\n' +
        '              default header\n' +
        '            </slot>\n' +
        '          </div>\n' +
        '\n' +
        '          <div class="modal-body">\n' + assigningTasksListingHTML +
        '        <div class="row" >'+
        '        <label class="form-label">\n' +
        '            Title\n' +
        '            <input v-model="title" class="form-control">\n' +
        '        </label>\n' +
        '        </div>\n' +
        '        <div class="row" >'+
        '        <label class="form-label">\n' +
        '            Body\n' +
        '            <textarea v-model="body" rows="5" class="form-control"></textarea>\n' +
        '        </label>'+
        '        </div>\n' +
        '          </div>\n' +
        '\n' +
        '          <div class="modal-footer">\n' +
        '            <slot name="footer">\n' +
        '              default footer\n' +
        '              <button class="modal-default-button" @click="$emit(\'close\')">\n' +
        '                OK\n' +
        '              </button>\n' +
        '            </slot>\n' +
        '          </div>\n' +
        '        </div>\n' +
        '      </div>\n' +
        '    </div>\n',
        created() {
            bus.$on('setAssigningTasksListingEvent', (assigningTasksListing) => {
                this.title= 'Set New title value 1:'+(new Date)
                this.body= 'Set New body value 2:'+(new Date)
                this.assigningTasksListing = assigningTasksListing
            })
        },
        mounted: function () {
	        ...
        }, // mounted: function () {
        data() {
            return{
                show: false,
                title: 'Default title value',
                body: 'Default body value',
                assigningTasksListing:['Default assigningTasksListing value']
            }
        }, // data() {
    })
    // DEFINE THE NEW TASKS MODAL DIALOG COMPONENT END
    export default {  // StatusLine.vue
        data: function () {
            return {
	            ...
                show_new_tasks_modal_modal: false,
            }
        }, // data: function () {
        mounted() {
        }, // mounted() {
        methods: {
            viewAssigningTasks() {
                axios.get(window.API_VERSION_LINK + '/get_assigning_tasks_details').then((response) => {
                    bus.$emit('setAssigningTasksListingEvent', {
                        'assigningTasksListing': response.data.assigningTasksListing
                    }); // this resources/assets/js/components/user_chats/UserChatsRun.vue file will receive it
                    this.show_new_tasks_modal_modal= true;
                })
            },
        } // methods: {
    }Спасибо !
Не в сети
По-прежнему ищу решение : пробую теймплейт определить как отдельный див с ссылкой на него в определении компонента:
<template>
	<div>
		<button id="show-modal" @click="showModal = true">Show Modal</button>
		<modal v-if="showModal" @close="showModal = false">
		</modal>
		<div id="template_1" class="modal-mask" v-if="showModal">
			<div class="modal-wrapper">
				<div class="modal-container">
					<div class="modal-header">
						default header
					</div>
					<div class="modal-body">
						CONTENT
					</div>
				</div>
			</div>
		</div>
	</div>
</template>
<script>
    // define the dialog component START
    Vue.component('modal', {
        template: "#template_1",
        mounted: function () {
            document.addEventListener("keydown", (e) => {
                if (/*this.show &&*/ e.keyCode == 27) {
                    this.close();
                }
            });
        }, // mounted: function () {
        data() {
            return {
                show: false,
            }
        }, // data() {
        methods: {
            close: function () {
                this.$emit('close');
            }
        }, // methods: {
    })
    // define the dialog component END
    export default {
        data() {
            return {
                showModal: false,
            }
        },
        mounted() {
        },
        methods: {}
    }
</script>Частично работает - то есть при клике на “Show Modal” кнопке модальное окно открывается Но в консоле ошибка :
app.js:1964 [Vue warn]: Cannot find element: #template_1
warn @ app.js:1964
query @ app.js:6607
(anonymous) @ app.js:12104
cachedFn @ app.js:1540
Vue$3.$mount @ app.js:12130
init @ app.js:5449
createComponent @ app.js:6896
createElm @ app.js:6844
updateChildren @ app.js:7133
patchVnode @ app.js:7224
patch @ app.js:7384
Vue._update @ app.js:4031
updateComponent @ app.js:4149
get @ app.js:4499
run @ app.js:4576
flushSchedulerQueue @ app.js:4338
(anonymous) @ app.js:3197
flushCallbacks @ app.js:3118
14:09:14.909 app.js:1964 [Vue warn]: Template element not found or is empty: #template_1
found in
---> <Modal>
       <DialogTest> at resources/assets/js/components/DialogTest.vue
         <Root>И чтобы модальное окно не было видимо при открытии окна я поставил условие :
<div id="template_1" class="modal-mask" v-if="showModal">Не уверен что это правильно...
А как правильно определить шаблон для модального окна ?
Не в сети
Мне удалось вывести модальное окно и массив с данными assigningTasksListing основываясь на котором мне нужно вывести список:
<template>
	<div >
		<button id="show-modal" @click="show_new_tasks_modal_modal = true">Show Modal</button>
		<newTasksModalDialog v-if="show_new_tasks_modal_modal" @close="show_new_tasks_modal_modal = false">
		</newTasksModalDialog>
<!-- Template with dialog html definition -->
<script type="text/x-template" id="template_new_tasks_modal_dialog">
  <transition name="modal">
    <div class="modal-mask">
    	<div class="modal-wrapper">
			<div class="modal-container">
				<div class="modal-header">
                    assigningTasksListing::{{ assigningTasksListing}}  <!-- This data array is shown ok -->
					default header
				</div>
				<div class="modal-body">
					CONTENT
					   assigningTasksListing::{{ assigningTasksListing}}  <!-- This data array is shown ok -->
					<hr>
					<ul>
						<li v-for="nextAssigningTask in assigningTasksListing">
						={{ nextAssigningTask.id }}
						</li>
					</ul>
					<!-- Many errors like : Property or method "nextAssigningTask" is not defined on the instance but referenced during render.  -->
					<hr>
				</div>
                <div class="modal-footer">
                    <slot name="footer">
                        default footer
                        <button class="modal-default-button" @click="$emit('close')">
                            OK
                        </button>
                    </slot>
                </div>
			</div>
		</div>
    </div>
  </transition>
</script>  <!-- template_new_tasks_modal_dialog -->
	</div>
</template>
<script>
    import {bus} from '../../app';
    // define the dialog component START
    Vue.component('newTasksModalDialog', {
        template: "#template_new_tasks_modal_dialog",
        mounted: function () {
            document.addEventListener("keydown", (e) => {
                if (/*this.show &&*/ e.keyCode == 27) {
                    this.close();
                }
            });
        }, // mounted: function () {
        props: {
        },
        data() {
            return {
                title: '',
                body: '',
            }
        }, // data() {
        methods: {
            close: function () {
                this.$emit('close');
                this.title = '';
                this.body = '';
            }
        }, // methods: {
    })
    // define the dialog component END
    export default {
        data() {
            return {
	            ...
                show_new_tasks_modal_modal: false,
                assigningTasksListing:[]
            }
        },
        mounted() {
        },
        methods: {
            viewFutureEvents() {
//                alert( "viewFutureEvents::"+var_dump(-13) )
            },
            viewAssigningTasks() {
                axios.get(window.API_VERSION_LINK + '/get_assigning_tasks_details').then((response) => {
                    this.assigningTasksListing   = response.data.assigningTasksListing
                    this.show_new_tasks_modal_modal = true;
                }).catch((error) => {
                    if (error.response.data.error_code == 11) {
                        this.showPopupMessage(error.response.data.message, 'error');
                        this.$router.push({path: '/'});
                    }
                    this.is_page_loaded = true
                    this.showRunTimeError(error, app);
                });
            },
        } // methods: {
    }
</script>Метод viewAssigningTasks вызывается кликом на кнопке.
Совершенно непонятно почему внутри блока 
<script type="text/x-template" ...массив assigningTasksListing выводится полностью как одна переменная, но ошибка при обращении к переменной цикла...
Если убрать цикл
<li v-for="nextAssigningTask in assigningTasksListing">то ошибки нет...
Или этот блок нужно определять как-то иначе ?
Не в сети
Страницы 1