2015-07-15 17 views
6

Differenza tra this vs $scope è chiaramente risposta a questa domanda. Uno dei progetti a cui sto lavorando, Il nostro ragazzo anziano sta promuovendo this su $scope sostenendo che offre prestazioni migliori.

Ho cercato di trovare prove per gli stessi documenti angolari ma ufficiali hanno informazioni molto limitate su questo argomento.

Può uno spiegare

  1. È this fornire prestazioni migliori su $scope (purché io non uso $watch ecc)
  2. Se sì per quali motivi esatto? il miglioramento delle prestazioni è abbastanza significativo da modificare un'applicazione esistente utilizzando $scope a this?
+0

possibile duplicato di [questo vs $ scope nei controller AngularJS] (http://stackoverflow.com/questions/11605917/this-vs-scope-in-angularjs-controllers) –

+0

si prega di leggere chiaramente la domanda, non sto chiedendo deferenza Sto chiedendo qualcos'altro – Yogesh

+4

riferimento: https://github.com/johnpapa/angular-styleguide –

risposta

5

prestazioni AngularJS è influenzato dal numero di impegnare la vista attualmente caricato (page) e utilizza gli orologi che si imposta manualmente utilizzando $watch. Tutto questo vincolante funziona solo su proprietà dichiarate su $ scope.

Ciò significa che se non si sta vincolando una proprietà per visualizzarla o non la si guarda, è meglio non dichiararla su $ scope (detto anche evitando l'inquinamento da ambito).

Venendo a this, come spiegato nel SO inserire this trovi contesto diverso quando viene richiamato da angolare (come nel caso di ng clic) e quando viene creato controllore.

Quindi tutto ciò che si dichiara su this (quando si fa riferimento al controller) tecnicamente non può essere associato alla vista poiché non è dichiarato nell'oscilloscopio.

Ma Angular ha trovato una sintassi controller as in cui ci consente di utilizzare proprietà e metodo sull'oggetto controller. In tale scenario, le proprietà dichiarate sul controller sono associate nella vista utilizzando la sintassi ctrl.prop. Internamente angolare fa qualcosa di simile quando si fa ng-controller='HomeController as ctrl'

$scope.ctrl=this

che in pratica significa angolare annette l'oggetto controller completo al $scope e quindi vincolante con proprietà del controller funzionano.

Quindi, l'unica cosa che importa in termini di prestazioni è il numero di rilegature da guardare.

+0

quindi, in breve, non vi è alcun vantaggio sulle prestazioni di 'this' su' $ scope' !? – Yogesh

+0

Come detto, le prestazioni sono definite dal numero di binding in vista, non direttamente da 'this' o' $ scope'. Se si definisce un numero di proprietà sull'ambito e non lo si utilizza mai, non influisce sulle prestazioni. – Chandermani

+2

Nel caso, è meglio usare '$ scope' anziché' this'? Se capisco correttamente, se la sintassi 'controller as' espone l'intero' this' a '$ scope', non causa più inquinamento' $ scope' che il metodo in cui dichiariamo '$ scope' nel controller solo quando ne abbiamo bisogno? – Neel

0

Angularjs utilizza entrambi in modo intercambiabile, quindi non c'è differenza per quanto riguarda le prestazioni.

Ma l'utilizzo di this dovrebbe essere prestazioni inferiori (nemmeno inferiori) rispetto allo $scope come this crea una nuova istanza dell'oggetto.

Ma in realtà utilizzando this è il modo più elegante come: (. Per esempio items.name di nome)

  • Più contestuale
  • Può essere utilizzato regolatore nidificato facilmente senza alcun conflitto.
+0

Questo non è corretto, – Chandermani

0

Supponendo che non si disponga di orologi non dovrebbe creare una barriera di prestazioni.

A mio parere, è necessario non avere alcun "questo" metodo \ proprietà sul proprio controller.
A controller è il migliore amico della vista e dovrebbe avere solo proprietà pertinenti su di esso.
Una proprietà rilevante è una proprietà che verrà associata alla vista (proprietà, funzioni, ecc.).

Tutte le proprietà "this" dovrebbero probabilmente essere su un service.