mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix($scope): $evalAsync executes on the right scope
Executes $evalAsync at the scope that the call was made Closes: #3548
This commit is contained in:
parent
40414827f4
commit
10cc1a42c9
2 changed files with 19 additions and 4 deletions
|
|
@ -501,7 +501,7 @@ function $RootScopeProvider(){
|
|||
dirty, ttl = TTL,
|
||||
next, current, target = this,
|
||||
watchLog = [],
|
||||
logIdx, logMsg;
|
||||
logIdx, logMsg, asyncTask;
|
||||
|
||||
beginPhase('$digest');
|
||||
|
||||
|
|
@ -511,7 +511,8 @@ function $RootScopeProvider(){
|
|||
|
||||
while(asyncQueue.length) {
|
||||
try {
|
||||
current.$eval(asyncQueue.shift());
|
||||
asyncTask = asyncQueue.shift();
|
||||
asyncTask.scope.$eval(asyncTask.expression);
|
||||
} catch (e) {
|
||||
$exceptionHandler(e);
|
||||
}
|
||||
|
|
@ -704,7 +705,7 @@ function $RootScopeProvider(){
|
|||
});
|
||||
}
|
||||
|
||||
this.$$asyncQueue.push(expr);
|
||||
this.$$asyncQueue.push({scope: this, expression: expr});
|
||||
},
|
||||
|
||||
$$postDigest : function(fn) {
|
||||
|
|
|
|||
|
|
@ -766,6 +766,17 @@ describe('Scope', function() {
|
|||
expect($rootScope.log).toBe('12');
|
||||
}));
|
||||
|
||||
it('should run async expressions in their proper context', inject(function ($rootScope) {
|
||||
var child = $rootScope.$new();
|
||||
$rootScope.ctx = 'root context';
|
||||
$rootScope.log = '';
|
||||
child.ctx = 'child context';
|
||||
child.log = '';
|
||||
child.$evalAsync('log=ctx');
|
||||
$rootScope.$digest();
|
||||
expect($rootScope.log).toBe('');
|
||||
expect(child.log).toBe('child context');
|
||||
}));
|
||||
|
||||
it('should operate only with a single queue across all child and isolate scopes', inject(function($rootScope) {
|
||||
var childScope = $rootScope.$new();
|
||||
|
|
@ -777,7 +788,10 @@ describe('Scope', function() {
|
|||
|
||||
expect(childScope.$$asyncQueue).toBe($rootScope.$$asyncQueue);
|
||||
expect(isolateScope.$$asyncQueue).toBe($rootScope.$$asyncQueue);
|
||||
expect($rootScope.$$asyncQueue).toEqual(['rootExpression', 'childExpression', 'isolateExpression']);
|
||||
expect($rootScope.$$asyncQueue).toEqual([
|
||||
{scope: $rootScope, expression: 'rootExpression'},
|
||||
{scope: childScope, expression: 'childExpression'},
|
||||
{scope: isolateScope, expression: 'isolateExpression'}]);
|
||||
}));
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue