mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-01-12 22:45:52 +08:00
fix($compile): returning null when an optional controller is not found
Currently, `undefined` is returned. However, the desired behavior is to return `null` when the controller is optional and not found. (If this breaks your app, it really shouldn't .v.) Closes #9404 Closes #9392
This commit is contained in:
committed by
Caitlin Potter
parent
4bf254c155
commit
2cd5b4ec44
@@ -1767,7 +1767,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) {
|
||||
|
||||
@@ -4197,38 +4197,38 @@ describe('$compile', function() {
|
||||
});
|
||||
|
||||
|
||||
it("should not throw an error if required controller can't be found and is optional",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);
|
||||
log('dep:' + controller);
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
inject(function(log, $compile, $rootScope) {
|
||||
$compile('<div main><div dep></div></div>')($rootScope);
|
||||
expect(log).toEqual('dep:false');
|
||||
expect(log).toEqual('dep:null');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it("should not throw an error if required controller can't be found and is optional with the question mark on the right",function() {
|
||||
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);
|
||||
log('dep:' + controller);
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
inject(function(log, $compile, $rootScope) {
|
||||
$compile('<div main><div dep></div></div>')($rootScope);
|
||||
expect(log).toEqual('dep:false');
|
||||
expect(log).toEqual('dep:null');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user