Scope should retrieve $log and $exceptionHandler via $service

- fix $log and $exceptionHandler retrieval
- remove reference to non-existent `error` handler
- update tests
This commit is contained in:
Igor Minar 2011-01-24 15:30:28 -08:00
parent a6a4c18ecd
commit 9368ea3814
2 changed files with 16 additions and 12 deletions

View file

@ -243,6 +243,7 @@ function createScope(parent, providers, instanceCache) {
parent = Parent.prototype = (parent || {}); parent = Parent.prototype = (parent || {});
var instance = new Parent(); var instance = new Parent();
var evalLists = {sorted:[]}; var evalLists = {sorted:[]};
var $log, $exceptionHandler;
extend(instance, { extend(instance, {
'this': instance, 'this': instance,
@ -425,13 +426,13 @@ function createScope(parent, providers, instanceCache) {
return expressionCompile(expression).call(instance); return expressionCompile(expression).call(instance);
} }
} catch (e) { } catch (e) {
(instance.$log || {error:error}).error(e); if ($log) $log.error(e);
if (isFunction(exceptionHandler)) { if (isFunction(exceptionHandler)) {
exceptionHandler(e); exceptionHandler(e);
} else if (exceptionHandler) { } else if (exceptionHandler) {
errorHandlerFor(exceptionHandler, e); errorHandlerFor(exceptionHandler, e);
} else if (isFunction(instance.$exceptionHandler)) { } else if (isFunction($exceptionHandler)) {
instance.$exceptionHandler(e); $exceptionHandler(e);
} }
} }
}, },
@ -635,5 +636,8 @@ function createScope(parent, providers, instanceCache) {
(instance.$service = createInjector(instance, providers, instanceCache))(); (instance.$service = createInjector(instance, providers, instanceCache))();
} }
$log = instance.$service('$log');
$exceptionHandler = instance.$service('$exceptionHandler');
return instance; return instance;
} }

View file

@ -163,13 +163,13 @@ describe('scope/model', function(){
}); });
it('should report error on $excetionHandler', function(){ it('should report error on $excetionHandler', function(){
var element = jqLite('<div></div>'); var errors = [],
var scope = createScope(); errorLogs = [],
scope.$exceptionHandler = function(e){ scope = createScope(null, {}, {$exceptionHandler: function(e) {errors.push(e)},
this.error = e; $log: {error: function(e) {errorLogs.push(e)}}});
};
scope.$tryEval(function(){throw "myError";}); scope.$tryEval(function(){throw "myError";});
expect(scope.error).toEqual("myError"); expect(errors).toEqual(["myError"]);
expect(errorLogs).toEqual(["myError"]);
}); });
}); });
@ -215,8 +215,8 @@ describe('scope/model', function(){
}); });
describe('$new', function(){ describe('$new', function(){
it('should $new should create new child scope and $become controller', function(){ it('should create new child scope and $become controller', function(){
var parent = createScope(null, {exampleService: function(){return 'Example Service';}}); var parent = createScope(null, angularService, {exampleService: 'Example Service'});
var child = parent.$new(temp.InjectController, 10); var child = parent.$new(temp.InjectController, 10);
expect(child.localService).toEqual('Example Service'); expect(child.localService).toEqual('Example Service');
expect(child.extra).toEqual(10); expect(child.extra).toEqual(10);
@ -229,7 +229,7 @@ describe('scope/model', function(){
describe('$become', function(){ describe('$become', function(){
it('should inject properties on controller defined in $inject', function(){ it('should inject properties on controller defined in $inject', function(){
var parent = createScope(null, {exampleService: function(){return 'Example Service';}}); var parent = createScope(null, angularService, {exampleService: 'Example Service'});
var child = createScope(parent); var child = createScope(parent);
child.$become(temp.InjectController, 10); child.$become(temp.InjectController, 10);
expect(child.localService).toEqual('Example Service'); expect(child.localService).toEqual('Example Service');