Как синхронизировать 2 свойства? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь создать веб-приложение, которое имитирует оправданные функции. В одном из продуктов вы можете выбрать количество ингредиентов. После отправки продукта на ordini.component (компонент заказа) из crea-hamburger.component я пытаюсь сбросить свойства продукта по умолчанию. Но каким-то образом это изменяет значения, которые я отправил и сохранил в объекте ordini.component

свойство объекта в crea-hamburger / crea-hamburger.component:

prodotto: Prodotto = {
        id: undefined,
        nome: undefined,
        prezzo: this.prezzoHamburger,
        priorita: 1,
        isMenu: false,
        showOpzioni: false,
        opzioni: []        
    }  

Обработка количества вариантов товара

//lista ingredienti nella quale vengono salvate le opzioni
let ingrediente = this.prodotto.opzioni.find(opzione => opzione.id == objIngrediente.id); 
//L'indice dell'ingrediente nella lista originale
let indexIngrediente = this.creaHamburgerService.getIndex(objIngrediente.id);

 if(ingrediente == undefined || ingrediente == null){
                this.prodotto.opzioni.push({
                id: objIngrediente.id,
                nomeOpzione: objIngrediente.nome,
                opzioneSelezionata: undefined,
                priorita: 1,
                prezzo: objIngrediente.prezzo,
                quantita: objIngrediente.quantita + 1
                });            
//Aggiorno anche la lista che viene utilizzata per mostrare i dati sulla page
this.listaOpzioniSelezionate[indexIngrediente].quantita = objIngrediente.quantita + 1;
this.listaOpzioniSelezionate[indexIngrediente].prezzo = objIngrediente.prezzo;

свойства классов в shared / ordini.service

export class Ordine implements IOrdine {
    prodotti?: Prodotto[];
    constructor(){
        this.prodotti = [];
    }
    id: number;
    totale: number;
    nomeCliente: string;
    consegnaDomicilio: boolean;
    citta: string;
    cap: number;
    indirizzo: string;
    citofono: string;
    internoScala?: string;
    numeroTelefono: number;
    data: Date;
    orario: string;
    note?: string;
    allergie?: boolean;
    noteAllergie?: string;
}
export class Prodotto implements IProdotto{
    id: number;
    nome: string;
    prezzo: number;
    priorita: number;    
    opzioni: Opzioni[];
    isMenu : boolean;
    showOpzioni: boolean;
    constructor(){
        this.opzioni = [];
    }
}
export class Opzioni implements IOpzioni{
    id: number;
    nomeOpzione: string;
    opzioneSelezionata?: string;
    priorita:number;
    prezzo: number;
    quantita?:number;
}

Отправка продукта на ordini.service (служба заказа) и попытка сброса объекта продукта

aggiornaOrdine(value){  
        this.calcolaPrezzoTot();
        this.prodotto.prezzo = this.prezzoTotOpzioni + this.prezzoHamburger;
        this.prodotto.nome = value.tipoHamburger;
        console.log(value.tipoHamburger)
        if(this.ordine.inserisciProdotto(this.prodotto)){ //inserisco il prodotto chiamando il servizio ordine
            this.toastr.success("Proddotto aggiunto correttamente");
            console.log(this.prodotto);

            setTimeout(() => {
                this.creaForm.reset();
                this.reimpostaOggettoProdotto();                
            }, 200);
        }
        else
            this.toastr.error("Qualcosa è andato storto, contattare l'amministratore");
    }


reimpostaOggettoProdotto(){
     this.prodotto.nome = undefined;
     this.prodotto.prezzo = this.prezzoHamburger;
     this.prodotto.opzioni = [];
     this.listaOpzioniSelezionate = listOpzioniPulita;
}

Ordini.service для получения информации о продукте и отправки ее на ordini.comпонент для отображения

export class OrdineService{
    ordine: Ordine;
    private ordineListProdotti;
    ordineListAggiornato; 
    private prezzoTotale;
    prezzoTotaleAggiornato;

    constructor(){
        this.ordine = new Ordine();
        this.ordineListProdotti = new BehaviorSubject(this.ordine.prodotti);
        this.ordineListAggiornato = this.ordineListProdotti.asObservable(); //VARIABILE UTILIZZATA DAI COMPONENTI PER INVIARE/RICEVERE DATI
        this.prezzoTotale = new BehaviorSubject<number>(this.ordine.totale);
        this.prezzoTotaleAggiornato = this.prezzoTotale.asObservable(); //VARIABILE UTILIZZATA DAI COMPONENTI PER INVIARE/RICEVERE DATI
    }

    /**
     * Inserisce il prodotto nell'oggetto Ordine
     * @param ObjProdotto 
     */
    inserisciProdotto(prodotto: Prodotto){
        let res: boolean = false;
        try {
            const nextId = this.ordine.prodotti.length;            
            prodotto.id = nextId;
            this.ordine.prodotti.push(prodotto);
            res = true;
        } 
        catch (error) {
            console.log(error.message);
            res = false;
        }
        //AGGIORNO LA LISTA ORDINE UTILIZZATA DALL'ORDINE COMPONENT
        this.ordineListProdotti.next(this.ordine.prodotti);
        this.calcoloPrezzoTotale();
        return res;
    }

}

весь код здесь, если кто-то не мог понять из общего кода https://github.com/SDGItalySrl/Burger2Trip

Без сброса объекта продукта все отображается правильно (мне нужно сбросить все, чтобы иметь возможность отправить следующий продукт):

https://drive.google.com/file/d/1-nk901AQcT9P-1KSifxgZODiXQiqgpRm/view?usp=sharing

После использования функции reimpostaOggettoProdotto ():

https://drive.google.com/open?id=1DGxbQYYrqoUx-HVgxVG3qW3fD0oIBPRm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...