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

    @kttotto
    пофиг на чем писать
    Ошибка в логике метода showElement.

    Вы добавляете id всегда в конец списка, а удаляете id по индексу положения div в списке, хотя не факт, что id именно в этом месте будет.

    Например, кликнули по 3-му элементу, потом по второму, будет selectedElArr = [2, 1], потом кликаете по 3-ему, чтобы его закрыть и метод захочет удалить selectedElArr[2], а такого элемента даже нет. Ну и т.д.

    Логичнее добавлять selectedElArr[index]=true и удалять selectedElArr[index]=false, если опираться на порядок div в списке. Ну и проверять потом так же
    if (!!this.selectedElArr[index]) {
     this.selectedElArr[index] = false;
    } else {
     this.selectedElArr[index] = true;
    }}

    Ну или одной строкой

    this.selectedElArr[index] = !this.selectedElArr[index];

    Если не опираться, то я бы добавил поле data.isOpened (isActive, isVisible и т.д.) и уже отталкивался от него, это мне кажется надежнее.
    Ответ написан
    Комментировать
  • Как решить проблему возникающую при ctrl + f5 во vue.js?

    @kttotto
    пофиг на чем писать
    Видимо, в localstorage селекторы попадают позже, чем их читает document.querySelector(key). При простом F5 в storage эти значения все еще есть, поэтому нормально читает. При ctrl+F5 storage очищается и при первом обращении там ничего нет, пока не отработает что-то, что заполняет его.
    Ответ написан
  • Правильная архитектура при построение Web приложения?

    @kttotto
    пофиг на чем писать
    Архитектура никак не зависит от стека.
    5e6ddff504334597793261.png
    Где здесь, хоть что-то указывает на стек?
    При "правильной архитектуре" каждая часть может быть написана на чем угодно (в пределах разумного, конечно) и все будет работать как часы.
    Ответ написан
    Комментировать
  • Как проверить на null Vue.JS из Модели ASP.Net?

    @kttotto
    пофиг на чем писать
    Судя по тому, что Вы хотите сделать split, предполагаю, что Model.Tags имеет тип string.
    Тогда, как вариант, можно сделать так
    addTags: function() {
    	this.tags = @Json.Serialize(Model?.Tags?.Split(',') ?? []);
    }


    Ошибка в этой строке
    if(@Model != null && @Model.Tags != null)
    потому, что @Model приведется к string в разметке, а @Model.Tags вставится как строка как есть. И в разметке выйдет что-то такое
    if(System.Object != null && tag1,tag2,tag3 != null) { ... }

    Ну и понятно, что такая разметка в браузере даст ошибку. Поэтому, перед тем как вставить модель в разметку js, лучше делать сериализацию к json. Ну либо делать как-то так
    if('@(Model?.Tags ?? "")'.length > 0) { ... }
    Ответ написан
    Комментировать
  • Как спроектировать крупное приложение на vue?

    @kttotto
    пофиг на чем писать
    Мы делали крупные проекты с vue, но это не было полноценным spa и не микросервисная архитектура. У нас просто было несколько entry, которые мы использовали для разных разделов.

    Мое мнение, если никто из вас раньше не имел дело с микросервисами, то с ходу не беритесь. Угрохаете кучу времени просто на один каркас и не факт, что все будет работать хорошо с точки зрения надежности и безопасности.

    Я бы начал с монолита, но с расчетом на то, чтобы потом его с минимальными затратами можно было разбить на части. Во первых быстрее получите первую версию, во вторых со временем виднее будут видны границы модулей, легче будет понять, что именно можно или нужно выделить в микросервис, вы воочию увидите что и с чем общается. Чтобы при первом проектировании правильно эти границы определить, нужно иметь какой то опыт с микросервисами. Я так понял, что у вас его нет или он минимальный.

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

    Безболезненно переписать модуль на vue проблем нет при любых раскладах. Только если не решите на ангуляр перейти, тут я сомневаюсь, что его можно точечно использовать в проекте. У нас как то был большой легаси проект, монолит, который был на jq, мы сначала решили добавить knockout, нам не понравилось, дальше продолжали на vue.
    Ответ написан
    1 комментарий
  • Как предотвратить повторное выполнение axios запроса?

    @kttotto
    пофиг на чем писать
    1. Ajax способен сам кешировать запрос, если параметр cache=true и если строка запроса не поменялась.
    2. Можно хранить состояние страницы вместе с данными где-то уровнем выше, в компонентах, которые не пересоздаются при загрузки страницы, а при загрузке страницы проверять наличие этих данных.
    3. Vuex - он как раз предназначен для глобального хранения состояний.
    Ответ написан
    Комментировать
  • Как на стороне клиента принять данные по частям при GET запросе?

    @kttotto
    пофиг на чем писать
    Если Вы не можете использовать пагинацию данных, то никак. Если Вы имеете доступ к оптимизации бд, то может имеете доступ и к backend, тогда добавить api, чтобы можно было получать часть данных по параметрам страница и кол-во данных на странице.
    А в таком варианте можно посоветовать только отрисовывать параллельно, может пару секунд сэкономится.
    Ответ написан
    Комментировать
  • Как в Vue реагировать на изменение в value сделанные через jQuery?

    @kttotto
    пофиг на чем писать
    Не проверял в коде, но можно попробовать как то так
    dateTime: DateTime = new DateTime();
    
    mounted(){
    	const self = this;
    	this.nextTick(function(){
    		$('.datetimepicker').datetimepicker({
                format: 'dd.mm.yyyy hh:ii:ss',
                autoclose:true,
                language: 'ru'
            })
            .on('changeDate', function(ev) {
                var value = $("#selectDateStart").val();
                self.dateTime = value;
            });
    	})
    }
    
    @Watch("dateTime")
    onDateTime(){
    	// ...
    }
    Ответ написан
    Комментировать
  • Как сделать сохранение списка итемов чтоб не перезагружались при каждом переходе обратно в Vue?

    @kttotto
    пофиг на чем писать
    Можно закешировать запрос, установив параметр аякс запроса cache=true.
    Можно использовать внутреннее хранилище, первый ответ запомнили, последующие отдаете его. Но в этом случае надо сделать кнопочку для списка "обновить".
    Ответ написан
    Комментировать
  • Используется ли Vue в крупных проектах и вообще используется ли?

    @kttotto
    пофиг на чем писать
    Мы используем и в крупных проектах тоже.
    Ответ написан
    Комментировать