diff --git a/src/modal/modal.js b/src/modal/modal.js index f591088161..49745c34c2 100644 --- a/src/modal/modal.js +++ b/src/modal/modal.js @@ -671,7 +671,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap']) } }); - var ctrlInstance, ctrlLocals = {}; + var ctrlInstance, ctrlInstantiate, ctrlLocals = {}; //controllers if (modalOptions.controller) { @@ -681,18 +681,27 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap']) ctrlLocals[key] = value; }); - ctrlInstance = $controller(modalOptions.controller, ctrlLocals); + // the third param will make the controller instantiate later,private api + // @see https://github.com/angular/angular.js/blob/master/src/ng/controller.js#L126 + ctrlInstantiate = $controller(modalOptions.controller, ctrlLocals, true); if (modalOptions.controllerAs) { + ctrlInstance = ctrlInstantiate.instance; + if (modalOptions.bindToController) { ctrlInstance.$close = modalScope.$close; ctrlInstance.$dismiss = modalScope.$dismiss; angular.extend(ctrlInstance, providedScope); - if (angular.isFunction(ctrlInstance.$onInit)) { - ctrlInstance.$onInit(); - } } + ctrlInstance = ctrlInstantiate(); + modalScope[modalOptions.controllerAs] = ctrlInstance; + } else { + ctrlInstance = ctrlInstantiate(); + } + + if (angular.isFunction(ctrlInstance.$onInit)) { + ctrlInstance.$onInit(); } } diff --git a/src/modal/test/modal.spec.js b/src/modal/test/modal.spec.js index 84d22f50ba..43775634dc 100644 --- a/src/modal/test/modal.spec.js +++ b/src/modal/test/modal.spec.js @@ -815,6 +815,7 @@ describe('$uibModal', function() { open({ template: '