In che modo l'associazione dati a due vie differisce dalla semplice sincronizzazione automatica?

0

La documentazione AngularJS menziona il fatto che considera l'associazione dati unidirezionale "cattiva" e il binding bidirezionale dei dati essere buoni*'. Tuttavia, esaminando le definizioni di associazione dati bidirezionale utilizzate, tutto ciò che sembra essere è una sincronizzazione automatica messa in atto tra la vista e il modello.

Schema

Sicuramente questo ha un impatto sulle prestazioni e utilizza risorse aggiuntive. Oppure mi sfugge qualcosa? I dati bidirezionali vincolano qualcosa di più di un auto-sync MVC e ci sono alcuni aspetti della teoria del binding dei dati che farebbero sì che il binding dei dati bidirezionale a always sia preferibile, come sembra essere implicito in la documentazione e i diagrammi?

* fa questo con facce tristi e sorridenti invece di parole, come si può vedere sopra ...

    
posta Guy Incognito 16.06.2016 - 16:40
fonte

2 risposte

0

Dalla documentazione, presumo che per "la maggior parte dei sistemi di template" si riferiscano principalmente a template lato server che vengono visualizzati in una vista. Mi sento a mio agio nel fare questa ipotesi a causa di una dichiarazione successiva che spiega perché angolare è diversa: "... il modello ... è compilato sul browser." La fase di compilazione produce una visualizzazione live. " E anche perché altri client MVVM / MVC / MVP (aka MV *) le librerie offrono un binding bidirezionale simile.

Per i modelli sul lato server, non è normale che sia una "live view", perché la vista viene effettivamente visualizzata sul server anziché sul browser. Ciò rende essenzialmente l'associazione lato server vincolante. Il cliente deve inviare le modifiche. Quindi il server ricalcola i valori di associazione e restituisce una nuova vista da tali valori. Non sto solo parlando di pagine tradizionali basate su form. Ciò vale anche per i framework che caricano in modo asincrono i partial parziali che sono calcolati sul server.

In angolare, il modello e il controller vivono insieme alla vista. Quindi, quando l'utente modifica un valore di visualizzazione, è abbastanza cambiato sul modello e il controller può reagire a quella modifica ... ricalcolando i valori calcolati, caricando i dati relativi, ecc. Ma ancora, altre librerie lato client sono in grado di questo.

Direi che la terminologia non è eccezionale qui, perché internamente l'angolare ha un legame unidirezionale e bidirezionale sulle direttive. Questo confonde un po 'il problema. Ma per le direttive, è più importante se la proprietà del modello è esposta in sola lettura (a senso unico) o in lettura / scrittura (a due vie). (C'è un po 'più di quello, ma questo è il succo di ciò.)

Aggiorna

Quindi mi sembra che questa pagina sia più mirata a qualcosa come ReactJS, anche se potrebbe applicarsi anche ai server-side tech. Ecco un interessante articolo ulteriori discussioni sulla rilegatura unidirezionale o bidirezionale. (React è a senso unico.)

    
risposta data 16.06.2016 - 19:53
fonte
0

Sarei cauto nel semplificare ciò che accade sotto il cofano di Angular.js in MVC, poiché ci sono state innumerevoli discussioni su cosa sia MVC e se Angular implementa MVC o MVVM o alcuni altro paradigma MV *. È accettato nel mondo Angular che implementano Model-View-Whatever e lascia perdere.

Detto questo, la parte vincolante a due vie è piuttosto semplice. È solo la porzione di javascript che garantisce che gli elementi html della vista e il modello javascript rimangano sincronizzati sul client. Quando il modello cambia, la vista viene aggiornata e, man mano che la vista viene modificata, il modello viene aggiornato, sul client, quasi in tempo reale.

Questo è in contrasto con l'associazione unidirezionale, che prende ciò che il modello fornisce e lo applica alla vista, ma le modifiche alla vista non aggiornano il modello (senza un ritorno al server).

Per una libreria lato client come Angular, è piuttosto facile vedere come l'associazione dati bidirezionale è buona, poiché è la base per le pagine Web interattive in tempo reale. Molti elementi della pagina possono dipendere dallo stato del modello (tramite associazione bidirezionale) per il loro rendering e, poiché lo stato del modello cambia in risposta a alcune parti della vista che vengono manipolate, possono essere aggiornate anche altre parti della vista. Con il legame unidirezionale, ciò non sarebbe possibile.

    
risposta data 16.06.2016 - 20:25
fonte

Leggi altre domande sui tag