Ho un ambito angolare contenente due cose:Prestazioni di AngularJS: come aggiornare solo gli ambiti che conosco devono essere aggiornati?
- un tavolo gigante con 10k righe che prende un secondo per rendere
- alcune piccolo informazioni extra su di esso in una barra dell'intestazione della mascherina fissa
A seconda di quanto si è spostato verso il basso della pagina/tabella, devo aggiornare uno dei piccoli bit di informazione nell'intestazione; puoi considerarlo come un% di sconto su quanto hai passato.
per ottenere la posizione di scorrimento corrente, ho scritto una direttiva (si può anche trovare here):
app.directive "setWindowScroll", ->
restrict: "E"
scope:
setVariable: "="
link: (scope) ->
$(window).scroll ->
scope.$apply ->
scope.setVariable = $(window).scrollTop()
Il mio problema è che questo rende lo scorrimento intorno nella tabella u * nsuably lento * . Questo perché il veriable che scrivo con la mia direttiva si trova nelle informazioni extra nello scope, e il cambiamento sembra angolare a dirty-check l'intera tabella per le modifiche quando viene chiamato il mio $apply
.
So che questo scorrimento non cambierà mai nulla nella mia tabella e vorrei limitare il mio effetto $apply
all'intestazione del mio sito.
Come posso rendere angolare lo non controllare la tabella?
Dovevo aprire il plunker in una nuova finestra per ottenere una barra di scorrimento in firefox: http://run.plnkr.co/4CAAfTuXNmgfGdql/ –
Il collegamento alla nuova finestra non funzionava per me. [Questo] (http://beta.plnkr.co/45gKhAIt0DrozS7f0Bz2) e http://run.plnkr.co/plunks/45gKhAIt0DrozS7f0Bz2/ fatto. – nh2
Grazie per la tua grande risposta che lo spiega così bene. Ho messo la mia intestazione nel suo campo di applicazione e in effetti l'uso di '$ digest' invece di' $ apply' risolve i miei problemi. Tuttavia, hai ragione con ciò che dici alla fine - non essere in grado di usare * qualsiasi cosa * che chiama "$ apply" non è fattibile e molto limitante. Dal momento che la mia tabella non cambierà per lo più, proverò a renderizzare la tabella nel browser, ma senza binding di dati (distaccando gli osservatori dopo la creazione, scrivendo una direttiva personalizzata 'ng-repeat'-like, o usando un più primitivo , motore di template non vincolante solo per il tavolo). – nh2