REMOTE_ADDR
не подделать, но то в теории, потому что всякая кака на твоей стороне любит его подменять для удобства. Например нередко можно встретить глубоко в чужом коде подобную дыру:if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$xffaddrs = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $xffaddrs[0];
}
dev
, дизайнер от неё делает свою ветку feature
как обычно, потом когда пришло время делать MR - скриптом делается ещё одна ветка от feature
условно вида feature_to_dev_<date>
, и уже от неё делается MR в dev
, далее:feature
. dev
в feature
, если надо, дизайнер вливает через простой MR, и если есть конфликты - тыкает тебя, тут уж никак без остановки работы. Но, по идее, частых конфликтов быть не должно если регулярно вливали его работу в dev
. <div class="lang-changer" @click="toggle = !toggle">
<div :class="toggle ? 'lang-tog': 'lang'">
<span :class="toggle ? 'a': 'b'">РУ</span>
<span :class="toggle ? 'x': 'y'"></span>
</div>
</div>
data(){
return {
toggle: false;
}
}
v-on:
\@
и v-bind:
\:
- это разные вещи и они работают по-разному.v-bind
на вход получает выражение, т.е. по сути чистый js, и исполняет его, при: :clickMethod=" $router.push('/auth')"
в свойство clickMethod
прилетит результат вызова $router.push('/auth')
.<MainButton @clickMethod=" $router.push('/auth')"
условно(на самом деле там внутренняя система) происходит следующее: MainButton.addEventListener('clickMethod', ($event) => {
this.$router.push('/auth')
})
clickMethod
коллбэк, ты должен собственно передать туда заранее заданный в компоненте метод:<MainButton :clickMethod="clickMethod"
methods: {
clickMethod() {
this.$router.push('/auth')
}
}
Но так делать ни в коем случае не надо. Так пишут в React и это очень криво. Надо использовать именно v-on:
\@
и $emit
, как посоветовал Alex_mos . Это гораздо более удобно и контролируемо. Ну и в принципе это vue-way: вниз props - вверх события.