2013-03-14 16 views
57

C'è qualcosa nei documenti di AngularJS che non riesco a trovare o forse mi manca.AngularJS Sincronizzazione automatica dei dati tra server e client

Sto creando un'app Web con NodeJS e Express nel back-end e sto cercando di capire come può interagire con Angular nel front-end. In particolare, avrò un'API JSON per Angular da cui recuperare le informazioni. Voglio che il front end sia sempre aggiornato.

Le mie domande sono:

  • Does i dati a due vie funzione di legame significa angolare ($ risorsa o $ http) recupera automaticamente i dati dal server ogni n secondi?
  • Fa naturalmente uso di polling lungo, polling rapido o websocket?
  • Avete bisogno di JQuery per raggiungere la sincronizzazione server-client o è possibile eseguire tutto con lo standard con Angular?
  • Devi aggiungere codice aggiuntivo per rendere questo comportamento capitare? Devo usare $ timeout?

Ogni esempio che sembra trovare implica che il client recupera i dati una volta. Non sincronizzare i dati con il server.

+3

Angular non gestisce la sincronizzazione dei client/server. Se si desidera eseguire il polling del back-end su base regolare, è necessario scriverlo da soli. È possibile utilizzare $ timeout per comodità (quindi gli aggiornamenti si verificano all'interno del ciclo digest), ma è necessario eseguire l'aggiornamento dell'ambito nel proprio codice. – Jollymorphic

risposta

81

Il collegamento a due vie in AngularJS fa riferimento al modello dati ($ scope) e alla vista (direttive). Ad esempio, se i dati cambiano nel modello, la vista verrà automaticamente aggiornata. Allo stesso modo, se l'utente modifica i dati nella vista, il modello si aggiornerà automaticamente.

L'interazione con i servizi Web viene eseguita tramite il modulo del servizio $ http. Quindi, per ottenere i dati dal vostro API RESTful, si potrebbe fare qualcosa di simile:

$http.get('/someUrl').success(successCallback); 

La documentazione completa per $ http è sul AngularJS site. Penso che troverete che è molto simile ai metodi $ .ajax di jQuery. Puoi facilmente impostare $ http.get() per il polling breve con il servizio $ timeout di angular (fondamentalmente un wrapper per setTimeout).

Per gli aggiornamenti in tempo reale tra il client AngularJS e l'API del server, è possibile esaminare Socket.io. Utilizza node.js per creare una connessione di socket live tra il browser e il server e ha meccanismi di fallback (flash, long-polling) per i browser più vecchi. C'è un progetto boilerplate su GitHub che dimostra come impostare AngularJS con Socket.io: https://github.com/btford/angular-socket-io-seed

Per ricapitolare:

Does i dati a due vie funzione di legame significa angolare ($ risorsa o $ http) recupera automaticamente i dati dal server ogni n secondi?

No, il collegamento a due vie è tra i modelli angolari e le viste.

Fa naturalmente uso di polling lungo, polling breve o websocket?

Angolare non include nessuno di questi per impostazione predefinita. Devi metterli da te.

Avete bisogno di JQuery per raggiungere la sincronizzazione server-client o tutto può essere fatto con Angular?

$ HTTP è, in senso lato, l'equivalente angolare di jQuery di $ .ajax

Dovete aggiungere il codice in più per rendere questo comportamento accadere? Devo usare $ timeout?

Usa $ timeout per breve polling, o rotolare la propria soluzione per il lungo polling e/o WebSockets (vedere il progetto angular-socket-io-seed).

+2

Molto utile - potrebbe valere la pena ricordare che il "modello" in questo caso è il lato client. Questo non era ovvio per me. Sai se Angular sta pianificando di rendere socket.io o un altro modo di parlare con le API come predefinito nella libreria? Ero sorpreso che questa parte non fosse menzionata nei loro documenti. Grazie! –

+0

Forse puoi trovare ulteriori informazioni su come implementare questo concetto in questo progetto. Anche se è basato su KO ma puoi farti un'idea: https://github.com/imrefazekas/knockout.sync.js – Qorbani

+0

Dovresti esaminare Omnibinder - attualmente un prototipo, ma sta cercando di gestire la sincronizzazione del modello client-server. – Bringer128

Problemi correlati