<div
v-for="item in splitComments"
:key="item.id"
class="comment-item"
>
...
<span
class="comment-text"
v-for="(str, i) in item.textList"
:class="{highlight: i%2}"
>
{{ str }}
</span>
</div>
computed: {
splitComments() {
return this.comments.map(item => ({
...item,
textList: item.text.split(/(@\S+)/)
}))
}
}
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],