mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
- Speed improvements (about 4x on flush phase) - Memory improvements (uses no function closures) - Break $eval into $apply, $dispatch, $flush - Introduced $watch and $observe Breaks angular.equals() use === instead of == Breaks angular.scope() does not take parent as first argument Breaks scope.$watch() takes scope as first argument Breaks scope.$set(), scope.$get are removed Breaks scope.$config is removed Breaks $route.onChange callback has not "this" bounded
61 lines
2.5 KiB
JavaScript
61 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* @workInProgress
|
|
* @ngdoc service
|
|
* @name angular.service.$updateView
|
|
* @requires $browser
|
|
*
|
|
* @description
|
|
* Calling `$updateView` enqueues the eventual update of the view. (Update the DOM to reflect the
|
|
* model). The update is eventual, since there are often multiple updates to the model which may
|
|
* be deferred. The default update delayed is 25 ms. This means that the view lags the model by
|
|
* that time. (25ms is small enough that it is perceived as instantaneous by the user). The delay
|
|
* can be adjusted by setting the delay property of the service.
|
|
*
|
|
* <pre>angular.service('$updateView').delay = 10</pre>
|
|
*
|
|
* The delay is there so that multiple updates to the model which occur sufficiently close
|
|
* together can be merged into a single update.
|
|
*
|
|
* You don't usually call '$updateView' directly since angular does it for you in most cases,
|
|
* but there are some cases when you need to call it.
|
|
*
|
|
* - `$updateView()` called automatically by angular:
|
|
* - Your Application Controllers: Your controller code is called by angular and hence
|
|
* angular is aware that you may have changed the model.
|
|
* - Your Services: Your service is usually called by your controller code, hence same rules
|
|
* apply.
|
|
* - May need to call `$updateView()` manually:
|
|
* - Widgets / Directives: If you listen to any DOM events or events on any third party
|
|
* libraries, then angular is not aware that you may have changed state state of the
|
|
* model, and hence you need to call '$updateView()' manually.
|
|
* - 'setTimeout'/'XHR': If you call 'setTimeout' (instead of {@link angular.service.$defer})
|
|
* or 'XHR' (instead of {@link angular.service.$xhr}) then you may be changing the model
|
|
* without angular knowledge and you may need to call '$updateView()' directly.
|
|
*
|
|
* Note: if you wish to update the view immediately (without delay), you can do so by calling
|
|
* {@link angular.scope.$apply} at any time from your code:
|
|
* <pre>scope.$apply()</pre>
|
|
*
|
|
* In unit-test mode the update is instantaneous and synchronous to simplify writing tests.
|
|
*
|
|
*/
|
|
|
|
function serviceUpdateViewFactory($browser){
|
|
var rootScope = this;
|
|
var scheduled;
|
|
function update(){
|
|
scheduled = false;
|
|
rootScope.$flush();
|
|
}
|
|
return $browser.isMock ? update : function(){
|
|
if (!scheduled) {
|
|
scheduled = true;
|
|
$browser.defer(update, serviceUpdateViewFactory.delay);
|
|
}
|
|
};
|
|
}
|
|
serviceUpdateViewFactory.delay = 25;
|
|
|
|
angularServiceInject('$updateView', serviceUpdateViewFactory, ['$browser']);
|