Первоначальная версия
This commit is contained in:
207
public/data/id304.html
Normal file
207
public/data/id304.html
Normal file
@@ -0,0 +1,207 @@
|
||||
<h1>Добавление диалогов</h1>
|
||||
<h2>Диалог с сообщением</h2>
|
||||
<p>
|
||||
Некоторые ссылки в нашем приложении пока ведут в никуда и единственная реакция на щелчок по ним - это сообщение
|
||||
в консоли, что не особо информативно, исправим этот недочёт. Создадим новый компонент MessageDialog.vue и, не
|
||||
изобретая велосипедов, возьмём готовое решение для модального диалога из документации к Vuetify:
|
||||
<a href="https://vuetifyjs.com/ru/components/dialogs" target="_blank">https://vuetifyjs.com/ru/components/dialogs</a>,
|
||||
немного его модифицировав:
|
||||
|
||||
<div class="grey lighten-2" style="overflow-x: auto; border-radius: 5px;">
|
||||
<pre>
|
||||
<template>
|
||||
<v-layout row justify-center>
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
persistent
|
||||
max-width="290"
|
||||
>
|
||||
<v-card>
|
||||
<v-card-title class="headline">{{ title }}</v-card-title>
|
||||
<v-card-text>{{ text }}</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="green darken-1" flat @click="dialog = false">Ok</v-btn>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</v-layout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
dialog: false,
|
||||
title: "",
|
||||
text: ""
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
Подключите диалог, добавив в блок <code><script></script></code> файла App.vue строку
|
||||
<code>import MessageDialog from './components/MessageDialog'</code> и ниже в <code>components: {}</code>
|
||||
строку <code>MessageDialog</code>. Начало блока <code><sctipt></script></code> должно выглядеть следующим
|
||||
образом:
|
||||
|
||||
<div class="grey lighten-2" style="overflow-x: auto; border-radius: 5px;">
|
||||
<pre>
|
||||
<script>
|
||||
import MessageDialog from './components/MessageDialog'
|
||||
import TOC from './components/TOC'
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
MessageDialog,
|
||||
TOC
|
||||
},
|
||||
</pre>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
В конец блока <code><v-app></v-app></code> добавьте строку
|
||||
<code><MessageDialog ref="MessageDialog" /></code>, после чего останется только в коде скрипта добавить
|
||||
в секции .catch каждого обращения к Axios строки вызова нашего диалога с сообщением об ошибке:
|
||||
|
||||
<div class="grey lighten-2" style="overflow-x: auto; border-radius: 5px;">
|
||||
<pre>
|
||||
.catch(error => {
|
||||
console.log(error);
|
||||
this.$refs.MessageDialog.title = "Ошибка";
|
||||
this.$refs.MessageDialog.text = error;
|
||||
this.$refs.MessageDialog.dialog = true;
|
||||
});
|
||||
</pre>
|
||||
</div>
|
||||
Теперь все ошибки при загрузке файлов будут показаны пользователю.
|
||||
</p>
|
||||
|
||||
<h2>Диалог с индикатором загрузки</h2>
|
||||
<p>
|
||||
При медленном соединении наше приложение будет загружать данные молча, ни коим образом не оповещая пользователя о
|
||||
том, что оно работает, это нехорошо, давайте выводить при загрузке индикатор. Создадим компонент LoadingDialog.vue
|
||||
как всегда воспользовавшись шаблоном vuetify:
|
||||
|
||||
<div class="grey lighten-2" style="overflow-x: auto; border-radius: 5px;">
|
||||
<pre>
|
||||
<template>
|
||||
<div class="text-xs-center">
|
||||
<v-dialog
|
||||
v-model="dialog"
|
||||
hide-overlay
|
||||
persistent
|
||||
width="300"
|
||||
>
|
||||
<v-card
|
||||
color="primary"
|
||||
dark
|
||||
>
|
||||
<v-card-text>
|
||||
Загружаю данные, ожидайте...
|
||||
<v-progress-linear
|
||||
indeterminate
|
||||
color="white"
|
||||
class="mb-0"
|
||||
>
|
||||
</v-progress-linear>
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
dialog: false
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
dialog (val) {
|
||||
if (!val) return
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
Предлагаю вам самостоятельно подключить его в App.vue, добавив нужные строки в блоки шаблона и скрипта. В шаблоне
|
||||
значение ref установите равным "LoadingDialog".
|
||||
</p>
|
||||
<p>
|
||||
Справились? Теперь добавим код для отображения и скрытия диалога при загрузке файла в секцию mounted:
|
||||
<div class="grey lighten-2" style="overflow-x: auto; border-radius: 5px;">
|
||||
<pre>
|
||||
mounted () {
|
||||
this.$refs.LoadingDialog.dialog = true;
|
||||
|
||||
this.axios.get("data/start.html")
|
||||
.then(response => {
|
||||
this.text = response.data;
|
||||
this.$refs.LoadingDialog.dialog = false;
|
||||
})
|
||||
.catch(error => {
|
||||
this.$refs.LoadingDialog.dialog = false;
|
||||
console.log(error);
|
||||
this.$refs.MessageDialog.title = "Ошибка";
|
||||
this.$refs.MessageDialog.text = error;
|
||||
this.$refs.MessageDialog.dialog = true;
|
||||
});
|
||||
|
||||
this.$refs.LoadingDialog.dialog = true;
|
||||
|
||||
this.axios.get("data/toc.json")
|
||||
.then(response => {
|
||||
this.$refs.TOC.items = response.data;
|
||||
this.$refs.LoadingDialog.dialog = false;
|
||||
})
|
||||
.catch(error => {
|
||||
this.$refs.LoadingDialog.dialog = false;
|
||||
console.log(error);
|
||||
this.$refs.MessageDialog.title = "Ошибка";
|
||||
this.$refs.MessageDialog.text = error;
|
||||
this.$refs.MessageDialog.dialog = true;
|
||||
});
|
||||
|
||||
this.$watch(
|
||||
"$refs.TOC.active",
|
||||
(newVal, oldVal) => {
|
||||
if (newVal.length) {
|
||||
this.$refs.LoadingDialog.dialog = true;
|
||||
this.axios.get("data/id" + newVal + ".html")
|
||||
.then(response => {
|
||||
this.text = response.data;
|
||||
this.$refs.LoadingDialog.dialog = false;
|
||||
})
|
||||
.catch(error => {
|
||||
this.$refs.LoadingDialog.dialog = false;
|
||||
console.log(error);
|
||||
this.$refs.MessageDialog.title = "Ошибка";
|
||||
this.$refs.MessageDialog.text = error;
|
||||
this.$refs.MessageDialog.dialog = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
</pre>
|
||||
</div>
|
||||
</p>
|
||||
<p>
|
||||
Всё, теперь во время загрузки данных мы будем видеть сообщение с бегунком.
|
||||
</p>
|
||||
<p>
|
||||
P.S. Текст данной части можно взять тут: <a href="../data/id304.html" target="_blank">/data/id304.html</a>
|
||||
</p>
|
||||
<p>
|
||||
P.P.S. Финальную версию можно скомпилировать командой <code>yarn build</code>.
|
||||
</p>
|
||||
Reference in New Issue
Block a user