const marker = new google.maps.Marker({
map: this.map,
title: place.name,
position: place.geometry.location,
});
google.maps.event.addListener(marker, 'click', () => {
this.infowindow.setContent(marker.title);
this.infowindow.open(this.map, marker);
});
this.markers.push(marker);
updateMap() {
if (this.polyline) {
this.polyline.setMap(null);
}
this.polyline = new google.maps.Polyline({
path: this.markers.map(n => n.getPosition()),
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2,
map: this.map,
});
},
document.getElementById('map') <...> document.getElementById('inputPlace')
Vue.component('v-tooltip', {
template: `
<div class="wrp">
<div class="btn" @click="visible = !visible">{{ label }}</div>
<div class="tooltip" :class="{ visible }">{{ message }}</div>
</div>`,
props: {
label: {
type: String,
default: 'click me',
},
message: {
type: String,
default: 'hello, world!!',
},
},
data: () => ({
visible: false,
}),
});
@input="onInput($event, product)"
methods: {
onInput(e, product) {
product.quantity = Math.max(0, parseInt(e.target.value) || 0);
},
},
watch: {
products: {
deep: true,
handler() {
this.products.forEach(n => n.quantity = Math.max(0, parseInt(n.quantity) || 0));
},
},
},
data: () => ({
options: [
{ value: 69, text: 'hello, world!!' },
{ value: 187, text: 'fuck the world' },
{ value: 666, text: 'fuck everything' },
],
value: null,
}),
computed: {
selectedText() {
return (this.options.find(n => n.value === this.value) || {}).text || '';
},
},
<select v-model="value">
<option v-for="n in options" :value="n.value">{{ n.text }}</option>
</select>
<div>
Текст выбранной опции: <span>{{ selectedText }}</span>
</div>
в итоге выводится не разница, а просто текущее значение показателя
watch: {
totalBuyQuantity(newVal, oldVal) {
this.buyDiff = newVal - oldVal;
},
},
data: () => ({
opened: null,
blocks: [
{ id: 1, content: 'Я первый' },
{ id: 2, content: 'А я второй' },
{ id: 3, content: 'Третьим буду' },
],
}),
<a v-for="b in blocks" @click="opened = b">открыть {{ b.id }} блок</a>
<div v-if="opened" :class="`block-${opened.id}`">
<a @click="opened = null">Скрыть блок</a>
<div class="content">{{ opened.content }}</div>
</div>
filters: {
price: val => val.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1 ").replace('.', ','),
},
td {{ product.price | price }}
price: val => val.toLocaleString('ru', {
style: 'currency',
currency: 'RUB',
}),
:class="[ { infoItem.fadeClass: !infoItem.isVisible }, infoItem.defaultClass ]"
[infoItem.fadeClass]
:to="{ path: '/field_of_activity', props: { messageId: 1}}"
props: route => ({ ...route.query })
.props: route => ({ ...route.query, ...route.params })
при выборе меньше 100 кнопка submit (отправка формы) не появлялась либо не была активна?
<button :disabled="notAllGoalsAchieved">submit</button>
methods: {
notAchieved(goal) {
return goal.tasks.reduce((acc, n) => acc + n.value, 0) !== 100;
},
},
computed: {
notAllGoalsAchieved() {
return this.goals.some(this.notAchieved);
},
},
показывать что конкретная цель не до конца проставлена(каким нибудь текстовым сообщением)
<span v-show="notAchieved(g)">не достигнута</span>