- , $scope.$apply() . , : $apply , , , , , , , , .
(, , $scope.$$phase), , "$apply ". ( $scope ) , , , (. ).
$apply?
$apply - $scope , Angular. , , $scope (, , ), $apply . , , .
, Javascript , Angular . , , , , -, , .. $scope . Angular, . , " ". Google , :
function Controller($scope) {
$scope.coordinates = [];
var map = new google.maps.Map(mapElement, mapOptions);
google.maps.event.addDomListener(map, 'dblclick', function (mouseEvent) {
$scope.coordinates.push(mouseEvent.latLng);
});
}
http://jsfiddle.net/mhelvens/XLPY9/1/
, $scope.coordinates $apply less 'call-stack. , Angular Google .
$apply?
Angular $scope.$apply():
function Controller($scope) {
google.maps.event.addDomListener(map, 'dblclick', function (mouseEvent) {
$scope.$apply(function () {
$scope.coordinates.push(mouseEvent.latLng);
});
});
}
http://jsfiddle.net/mhelvens/XLPY9/2/
, . "$apply already in progress" , . Google, :
app.factory('onGoogleMapsEvent', function ($rootScope) {
return function (element, event, callback) {
google.maps.event.addDomListener(element, event, function (e) {
$rootScope.$apply(function () { callback(e); });
});
};
});
function Controller($scope, onGoogleMapsEvent) {
onGoogleMapsEvent(map, 'dblclick', function (mouseEvent) {
$scope.coordinates.push(mouseEvent.latLng);
});
}
http://jsfiddle.net/mhelvens/XLPY9/3/
onGoogleMapsEvent Angular -aware, " ", (, , ). $apply ; .
Angular . , $timeout.
<$apply already in progress
, , , , , , $apply :
onGoogleMapsEvent(map, 'dblclick', function (mouseEvent) {
$scope.$apply(function () {
$scope.coordinates.push(mouseEvent.latLng);
});
});
http://jsfiddle.net/mhelvens/XLPY9/4/
$apply (onGoogleMapsEvent , , "" ). , , :
Error: [$rootScope:inprog] $apply already in progress
...
at Scope.$apply (.../angular.js:11675:11)
at http://fiddle.jshell.net/mhelvens/XLPY9/4/show/:50:16
...
at Scope.$apply (.../angular.js:11676:23)
at dl.ondblclick (http://fiddle.jshell.net/mhelvens/XLPY9/4/show/:33:24)
...
: , Scope.$apply. , Scope.$apply ( Scope.$digest , ; $digest $apply).
, . , . Javascript. : ", " ", $apply". , .
, . , $apply. Angular , .