diff --git a/src/ng/compile.js b/src/ng/compile.js index 9cb0a75e9ef4..002e24497877 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -1764,7 +1764,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { "Controller '{0}', required by directive '{1}', can't be found!", require, directiveName); } - return value; + return value || null; } else if (isArray(require)) { value = []; forEach(require, function(require) { diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 6b425cca4c1e..2056faaba44d 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -4095,6 +4095,42 @@ describe('$compile', function() { }); + it("should pass null if required controller can't be found and is optional",function() { + module(function() { + directive('dep', function(log) { + return { + require: '?^main', + link: function(scope, element, attrs, controller) { + log('dep:' + controller); + } + }; + }); + }); + inject(function(log, $compile, $rootScope) { + $compile('
')($rootScope); + expect(log).toEqual('dep:null'); + }); + }); + + + it("should pass null if required controller can't be found and is optional with the question mark on the right",function() { + module(function() { + directive('dep', function(log) { + return { + require: '^?main', + link: function(scope, element, attrs, controller) { + log('dep:' + controller); + } + }; + }); + }); + inject(function(log, $compile, $rootScope) { + $compile('
')($rootScope); + expect(log).toEqual('dep:null'); + }); + }); + + it('should have optional controller on current element', function() { module(function() { directive('dep', function(log) {