Ответы пользователя по тегу Vue.js
  • Как правильно сделать компонент?

    Почему это не зашивать?
    Как раз более правильным будет зашить все запросы в тот компонент который их отправляет.

    Какие могут быть исключения?

    1 Если один запрос отправляют разные компоненты, но тогда лучше пересмотреть сами эти компоненты - например сделать один родительский, который объединит в т.ч. и запросы и несколько внутренних, сменяемых компонентов реализующих например разное представление. В крайнем случае сделать миксин с запросами

    2 Если данные прилетающие в ответ на отправляемые запросы используются разными компонентами, а не только тем которые отправляет запрос. В этом случае для хранения данных лучше использовать стор и туда же поместить запросы, например в экшены viuex, а компоненты в этом случае должны взаимодействовать не с сервером, а с vuex.
    Ответ написан
    Комментировать
  • Как хранить дополнительные данные компонентов?

    Suntechnic
    @Suntechnic Автор вопроса
    Если бы современные трасформеры могли ответить на этот вопрос, я бы вообще сюда не пришел.
    Ответ написан
    Комментировать
  • Как хранить состояние авторизованного пользователя в spa и как ее правильно обновлять?

    Во-первых зачем флаг - у тебя есть токен, вот тебе и флаг
    Во-вторых встрой эти данные прямо в страницу, если сервер авторизации и сервер с которым работаешь это по факту один и тот же сервак. Т.е. главная же у тебя все равно грузится?
    Добавь в нее объект json как-нибудь так:
    <script type="extension/settings" name="user">{"token":""}</script>

    И читай эти параметры при загрузки приложения. А потом храни в LS. Ну а если токен устарел - значит устарел.
    Если же серверы разные - то тут никак не пройдешь мимо запроса к серверу авторизации. Смело делай его - в чем проблема? Почему это вдруг не правильно?
    Ответ написан
    Комментировать
  • Как организовать вывод городов vuejs?

    Потому что ты изменяешь this.cities

    Что такое element.city в строке element.city = prb(element.city, searchSring.toLowerCase())?
    Это ссылка на this.cities[x].city - ты его перезаписал. Все, адью.

    Сделай так:
    cities.forEach(element => {
                            let newElement = JSON.parse(JSON.stringify(element))
                            newElement = prb(newElement.city, searchSring.toLowerCase())
                            if ((newElement.city).length>0){
                                arr.push(newElement)
                            }
                    });


    И что мешает хранить все города в едином списке, а не рзабитыми по буквам?
    Ответ написан
    Комментировать
  • Какой UI фреймворк выбрать для Vuejs?

    Vue такая штука, что в большинстве случаев легче написать нужный компонент ui самому чем установить, подключить и настроить универсальный внешний.
    Причём буквально. Провозился вчера с ошибкой vue-select (который до этого вполне себе работал в других проектах) полчаса, потом плюнул и за 20 минут написал свой селект.
    Ответ написан
    Комментировать
  • Где найти примеры очень сложных работ на Javascript/React/Angular/Vue?

    Очень сложные работы, это всегда просто совокупность маленьких и простых. А если это не так - то это плохой пример и на него лучше не смотреть вообще.
    Ответ написан
    Комментировать
  • Как изменять цвет текста в progress bar'е?

    А зачем? Просто пусть этот div перекрывает текст, а сам содержит такой же точно текст нужного цвета так же спозиционированный и выходящий за его край.
    Ответ написан
    Комментировать
  • Как собрать данные из нескольких input в одну переменную?

    Не нужно - делайте 4 input c model и вычисляемое свойство которое будет канкатенировать значения из input'ов.
    Добавляйте наблюдатель который будет следить за изменением этого свойства и переключать доступность и фокус инпатов. Возможно даже фокус и не надо двигать - просто отрубайте недоступные инпаты с помощью desebled
    Ответ написан
    Комментировать
  • Как сделать выбор целевого элемента?

    При клике вызывайте метод своего компонента который будет помещать выбранный цвет в отдельную переменную selectedColor.
    В шаблоне проверяйте совпадает ли color с selectedColor: v-if="color==selectedColor"
    Ответ написан
    4 комментария
  • Изменение в карточке товара в зависимости от выбора размера?

    Добавьте переменную selectedSize. В нее помещайте выбранный объект размера и берите эти данные из selectedSize.
    Всё.

    Кстати, почему у вас не все варианты имеют id?
    Ответ написан
  • Как убрать ошибку?

    А как связаны функции в коде, и рекурсия при сборке? У вас же сборщик вылетает.
    Ищите конструкции которые заставляют его уходить в рекурсию.
    Я бы не пытался разобраться а частями просто удалял бы код и смотрел когда пропадает ошибка сборки.
    Ответ написан
    Комментировать
  • Можно ли достать данные компонента снаружи в нужный момент?

    А почему у вас на каждуй вкладку отдельный компонент? Они так сильно разнятся и их невозможно обобщить до однодного?
    Но даже в этом случае у вас должен быть один компонент на все вкладки, который будет подключать разный контент как дочерний компонент по имени:
    <div class="tab">
            <component
                    v-bind:is="activeTabComponent"
                    v-model="values"
                ></component>
        </div>

    и передавать в этот дочерний компонент в модель, объект куда будет эмиттить свои данные дочерний компонент.
    И вот в этом компоненте вкладки расположите свою кнопку.
    Ответ написан
    Комментировать
  • Как сделать компонент модальной формы и работать с ней из разных компонентов?

    APP.popup = function (component,props) {
    	let mount_poiunt = document.createElement('div');
    	document.body.append(mount_poiunt);
    	
    	var props = {
    		'component':component,
    		'props':props
    	}
    	
    	var Popup = Vue.extend({
    		data: function () {
    			return props
    		},
    		destroyed () {
    			this.$el.remove()
    		},
    		methods: {
    			close: function () {
    				this.$destroy()
    			}
    		},
    		template: `<div class="popup">
    						<span v-on:click="close" class="close">✖</span>
    						<component v-bind:is="component" v-on:close="close" v-bind="props"/>
    					</div>`
    	})
    	
    	new Popup().$mount(mount_poiunt)
    };


    Далее ты просто делаешь так в методе компонента своего:
    APP.popup('имяКомпонентаКоторыйНадоПоказатьВПопапе', {параметрыЭтогоКомпонента});
    Ответ написан
    Комментировать
  • Как в vue.js перед изменением data проверять данные?

    Сделай два объекта с данными - один связанный с полями через модель, который будет отражать их состояние, а другой валидированные данные для отправки.
    Вотчем следи за изменением данных в объекте связанном с полями и перекладывай в объект для отправки, когда они валидные.
    Ответ написан
    Комментировать
  • Реактивность на Vue? Как обновить компонент?

    Требуется перерисовывать компонент каждый раз, когда приходят новые данные, как реализовать?

    Значит уже что-то не так. Не должно такого требоваться. Компонент должен перерисовываться сам на основании данных, когда это действительно нужно.

    this.firstWindow = Object.assign({}, this.firstWindow, data);

    Это вы добавляете объект в data? Не надо так делать - вы теряете реактивность.
    Положите этот объект в другой (на уровень ниже) и сделайте так:
    methods:{
          newvalue(data, whichScreen){        
             if(whichScreen){ 
               console.log("попал");
               console.log(data);         
               Vue.set(this.windows, 'firstWindow', Object.assign({}, this.firstWindow, data));
              
             }else{          
               Vue.set(this.windows, 'secondWindow', Object.assign({}, this.secondWindow, data));          
             }
          }
      }


    Сответственно у вас теперь будет this.windows.secondWindow вместо this.secondWindow
    Ответ написан
    Комментировать