Vue.use()
, теперь все плагины ставятся не глобально, а в конкретное приложение: import { createApp } from 'vue'
import { createStore } from 'vuex'
// Create a new store instance.
const store = createStore({
state () {
return {
count: 0
}
},
mutations: {
increment (state) {
state.count++
}
}
})
const app = createApp({ /* your root component */ })
// Install the store instance as a plugin
app.use(store)
(из официальной документации vuex)function getSkills(params: TGetSkills['requestParams']): TGetSkills['response'];
function getSkills(params: TGetSkillsWithCriterions['requestParams']): TGetSkillsWithCriterions['response'];
function getSkills(
params: (TGetSkills | TGetSkillsWithCriterions)['requestParams'],
) {
return instance.get<(TGetSkills | TGetSkillsWithCriterions)['response']>('url', {
params: params,
}),
}
getSkills: getSkills
require
работает на этапе компиляции. Т.е. во время исполнения он уже должен был собрать все вызовы require
и положить их в .js
файл. require
не может быть динамичным, потому что на этапе исполнения его тупо уже нет - он заменён на то, что он возвращает.img
уже сейчас лежат все нужные изображения.require
тебе тут не нужен(и не поможет), просто динамически подставляй пути к ним как в твоём первом варианте.__webpack_public_path__
:root: __webpack_public_path__,
<img :src="root + 'img/' + message.filename" :alt="message.filename"/>
const result = await modal({
title: ...,
type: 'confirm',
acceptText: 'Подтвердить',
...
})
showPopup() {
this.isDialogShown = true;
this.pending = new Promise((resolve) => {
this.discardChanges = () => resolve(false);
this.saveChanges = () => resolve(true);
});
},
async changeTab() {
...
return await this.pending;
}
changeTab() {
return new Promise((resolve) => {
this.discardChanges = () => resolve(false);
this.saveChanges = () => resolve(true);
});
}
index
- и есть в данном случае ключ. Т.е. проверять нужно просто index === 'dateTime'
.v-for="(filter, key, index) in filters"
. Однако в твоём случае он не нужен, т.к. лучше привязывать key
именно к ключу.prettier
- это одно, eslint
- это другое, если у тебя prettier
подключается через eslint
, то настройки для него указываются скопом, условно так:rules: {
'prettier/prettier': ['warn', {
semi: false,
...
singleQuote: true,
vueIndentScriptAndStyle: true,
arrowParens: 'avoid',
trailingComma: 'none',
quoteProps: 'consistent',
}],
const options = computed(() => {
if (props.secondType)
return props.secondTypeItems.map(({ id, value}) => ({
label: value,
value: id
}));
if (props.thirdType)
return props.thirdTypeEvents.map(({ desc, name }) => ({
label: name,
value: desc
}));
// ...
return [];
});
<el-select
v-model="modelText"
placeholder="Выберите предмет"
@change="changeVal"
>
<el-option
v-for="{ label, value} in options"
:key="value"
:label="label"
:value="value"
>
{{ label }}
</el-option>
</el-select>
axios.post('http://localhost:5000/api/create-post', () => {
body: data
})
Во-первых: axios
принимает параметром объект, а не функцию возвращающую объект.axios.post
вообще сразу принимает body: axios.post('http://localhost:5000/api/create-post', data)
() => {
body: data
}
на самом деле расшифровывается так: () => { // начало блока кода
// метка body указывающий на висящую в воздухе переменную data
body: data
// никакого возврата из функции
} // конец блока кода
чтобы оно воспринималось как объект, можно, например, заключать в скобки: () => ({
body: data
})
// версия с рантайм компилятором шаблонов
import { createApp } from 'vue/dist/vue.esm-bundler.js';
function renderVueComponent(template, data) {
const div = document.createElement('div');
createApp({
template,
data: () => data
}).mount(div);
return div.innerHTML;
}
type
).type ExtraProps = {
size?: 's' | 'm' | 'l';
}
type AnchorProps = ExtraProps & {href: string};
type ButtonProps = ExtraProps & {type: string};
function TappableComponent(props: AnchorProps ): ReactNode;
function TappableComponent(props: ButtonProps ): ReactNode;
function TappableComponent(props: AnchorProps | ButtonProps ) {
const Component = 'href' in props ? 'a' : 'button';
return <Component>...</Component>
}
currentTarget
а не target, потому что target
может оказаться например span
внутри этой ссылки, а не она сама.