tar "6.0.2"
, а не tar "^6.0.2"
.Vue
использует webpack
, а webpack
использует для запросов конкретные пути, которые ты указываешь при билде.publicPatch
указывает на соответствующий сайт.webpack
позволяет менять публичный путь динамически, присваивая его переменной __webpack_public_path__
. Остаётся только при старте приложения получить путь к скрипту, например из document.currentScript
, выделить из него нужный путь и присвоить его. /api
откуда надо, а только потом заворачивал все запросы на index.html
.vue-cli
используется webpack dev server, и там есть proxy, через который вы можете направить запросы с /api
на свои боевые или локальные сервера. const dateTimeLocal = reactive({
day: ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09"],
hour: ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09"],
minute: ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09"],
second: ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09"],
});
computed
свойства в vue пересчитываются когда меняются их реактивные зависимости, которые участвовали в предыдущих вычислениях
computed
к this.value
- теперь он смотрит за изменениями this.value
. Твоё же computed
ни к чему не обращается, оно просто возвращает функцию, её содержимое и вызовы к computed
не относятся.computed: {
validatedClass() {
return (input) => {
return {
'uk-form-success': this.wasValidated && !this.errors[input],
'uk-form-danger': this.wasValidated && this.errors[input],
}
}
}
},
function someRandomFunction(input) => {
return {
'uk-form-success': this.wasValidated && !this.errors[input],
'uk-form-danger': this.wasValidated && this.errors[input],
}
}
computed: {
validatedClass() {
return someFunction.bind(this);
}
},
computed
будет обновлён только когда Vue пошлёт. В идеале, на самом деле, никогда.this.errors = {}
.this.errors.email = []
- не реактивны.this.$set(this.errors, 'email', [])
либо, что лучше, заранее:this.errors = {
email: '',
// ...
}
this.$children
- очень очень очень плохо. Просто используй props
. Такая возможность наличествует только для крайне сложных случаев в компонентах библиотек. Точно не для твоего. bootstrap
во втором только modal
. Однако на деле нет никакой разницы, потому что все популярные системы сборки умеют в tree-shaking
, т.е. оставляют в бандле только то, что используется. import()
, будет лежать в отдельном js файле, который подгрузится только когда попросят.created() {
if(mobile){
this.touchStart = () => {}
}
}
let touchStart;
if(mobile){
touchStart = function() {}
} else {
touchStart = function() {}
}
export {
touchStart
}
import {touchStart, ...} from './helpers';
methods: {
touchStart,
...
}
const touchMixin = {
methods: mobile ? {
touchStart() {}
} : {
touchStart() {}
}
}
mixins: [touchMixin],
class AsyncQueue {
constructor(result) {
this.queue = [];
this.result = result;
}
isStreaming = false;
add(promise) {
this.queue.push(promise);
if(!this.isStreaming)
this.stream();
}
async stream() {
this.isStreaming = true;
for await (const result of this.queue) {
this.result(result);
}
this.queue.length = 0;
this.isStreaming = false;
}
}
data() {
const schedulesQueue = new AsyncQueue(this.showLoadedSchedules);
return {
schedulesQueue,
// ...
}
},
methods: {
showLoadedSchedules(response) {
if(this.curDateEvent) {
this.changeMobileDay(this.curDateEvent);
}
// ...
},
addSchedulesToQueue(locationId, gameModeId, selectedHeadsets, day) {
let param = 'locationId=' + locationId + '&gameModeId=' + gameModeId + '&headsets=' + selectedHeadsets
if (day)
param += '&day=' + day;
return this.schedulesQueue.add(
axios({
method: 'get',
url: 'schedules?' + param
}).catch((error) => {})
);
}
}
Promise
, что такое async
\await
. Без этого ты никуда не уедешь.this.svg = await getFileContent(url)
, либо так getFileContent(url).then(a => this.svg = a)
. Promise
всегда возвращает Promise
. Тебе надо дождаться выполнения Promise
'а тем или иным способом.this.svg = getFileContent(url)
- конечно у тебя в this.svg
лежит Promise
. Этот Promise
только начинает выполнение и никаких данных там нет. Данные в него прилетят возможно через час, если ты на модеме.