• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzenie krótkiego kodu Vue.JS

Object Storage Arubacloud
0 głosów
234 wizyt
pytanie zadane 14 czerwca 2019 w JavaScript przez Greeenone Pasjonat (16,100 p.)

Dobry wieczór !

Napisałem krótki component Vue.Js (pod api Laravela) który pobiera id z linku a następnie wyświetla dane z bazy danych. Kod działa ale nie wiem czy nie odwaliłem fuszerki ^^

Głównie to chodzi o pobieranie ID z linku. Użyłem (this.uri + params) ale gdzieś na StackOverflow znalazłem inne rozwiązanie które działało u osoby z problemem ale nie u mnie. Tym rozwiązaniem było (this.uri, {params})

Jakby ktoś mógł sprawdzić kod i ewentualnie (Jeśli są) prostsze lub lepsze rozwiązania to byłbym bardzo wdzięczny :)

<template>
  <div v-if="singleNews">
    {{singleNews.title}}
  </div>
</template>
<script>
var axios = require("axios");
export default {
  
  
  data(){
    
    return {
      
      singleNews: [],
      uri: 'http://127.0.0.1:8000/api/blog-news/',
      
    }
    
  },
  
  methods: {
    
    loadData(){
      
      const params = window.location.pathname.split('/')[3];
      
      axios.get(this.uri + params).then(response=>{
        
      this.singleNews = response.data.news;
        
      });
    }
    
  },
  
  mounted() {
    this.loadData();
    console.log("component mounted");
  }
  
}

 

2 odpowiedzi

+1 głos
odpowiedź 15 czerwca 2019 przez niezalogowany
wybrane 15 czerwca 2019 przez Greeenone
 
Najlepsza

1, Jeśli korzystasz z vue-router użyj this.$route.query zamiast bawić się location.path (ux-owo jeszcze ładniej byłoby zdefiniować dynamiczny route z id) W tym momencie, jeśli zmieni się ścieżka do tego widoku, będzie trzeba poprawiać kod w komponencie. Ponadto błąd ten nie będzie widoczny od razu. Jeśli nie korzystasz z vue router, użyj window.location.search 

2. data singleNews powinno być na starcie nullem. Pusta tablica przechodzi przez ifa

3.

Użyłem (this.uri + params) ale gdzieś na StackOverflow znalazłem inne rozwiązanie które działało u osoby z problemem ale nie u mnie. Tym rozwiązaniem było (this.uri, {params})

Nie gdzieś na stacku czytałem i coś tam działało, tylko idziesz do dokumentacji i szukasz czego potrzebujesz https://github.com/axios/axios#example

4. import axios from "axios" - nie mieszaj dwóch systemów modułów linijka za linijką.

5. Nie zostawiaj console.log-ów. Są niepotrzebne i irytujące przy dalszym rozwijaniu kodu.

6. created zamiast mounted, Nie ma sensu czekać z requestem do API, aż komponent zostanie zamontowany w DOM-ie

7. Jeśli korzystasz z tego samego API w innych miejscach w aplikacji, warto zdefiniować baseURL dla axiosa

8. Raz piszesz literał stringu z " innym razem '. Sporo niepotrzebnych enterów. Polecam używać eslinta.

komentarz 15 czerwca 2019 przez Greeenone Pasjonat (16,100 p.)

Hej, dziękuje za aż tak wyczerpującą odpowiedź ! Na pewno zastosuje się do wszystkich twoich rad.

Mam tylko jeszcze dwa pytania.

4: Nie zrozumiałem o co dokładnie chodzi. Czy o to, nie mogą być jeden pod drugi ?

  var axios = require("axios";
  var toastr = require('toastr');

I jeszcze pytanie dotyczące uwagi przedmówcy. Czy pobieranie danych jest poprawne czy musi być obowiązkowo tak jak pisał m4sk1n ?

Chodzi o dodanie obiektu ?


singleNew:{
id: NULL,
title: ''
},

 

komentarz 15 czerwca 2019 przez niezalogowany
4. "require" jest z CJS, niżej masz "export default" z ESM - używaj tylko ESM

2. singleNew: null
0 głosów
odpowiedź 15 czerwca 2019 przez m4sk1n Pasjonat (16,750 p.)
Co zrobiłeś nie tak — sprawdzasz „czy singleNews”. Ponieważ w funkcji zwracającej data przypisałeś do singleNews pustą tablicę (!![] === true), warunek ten jest spełniony od razu po zamontowaniu komponentu, nie jest spełniany tylko w przypadku gdy !!response.data.news === false. Warunkiem może być if singleNews.title, lub możesz ustawić w funkcji data singleNews jako np. undefined.

Poza tym wpisałeś tu tablicę zamiast obiektu
komentarz 15 czerwca 2019 przez Greeenone Pasjonat (16,100 p.)
Hej dzięki za odpowiedź. Jesteś pewien co do tablic ? W dwóch kursach dwóch różnych instruktorów używało tablic nawet do updatu pojedynczych obiektów.

Po wysłaniu obiektu i odebraniu go przez Axios'a, vuejs sypie mi błędami

Co do warunku to faktycznie moje niedopatrzenie ^^

Podobne pytania

0 głosów
1 odpowiedź 119 wizyt
+1 głos
2 odpowiedzi 383 wizyt
pytanie zadane 19 kwietnia 2021 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)
+4 głosów
3 odpowiedzi 360 wizyt

92,543 zapytań

141,386 odpowiedzi

319,494 komentarzy

61,929 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...