使用共享的AngularJS控制器关闭模式对话框

时间:2015-03-04 20:04:50

标签: angularjs angular-ui-bootstrap

通常关闭AngularJS中的bootstrap模式对话框,我只需将$ modalInstance注入对话框的控制器,然后调用$ modalInstance.dismiss()。

但是,我有一个案例,我在两个视图之间共享一个控制器。第一个视图永远不会显示在模态对话框中,第二个视图始终显示在模态对话框中。

我希望有一种方法可以选择将$ modalInstance注入控制器,但是在打开未定义$ modalInstanceProvider的非模态视图时会出现异常。我还尝试通过将$ injector注入控制器并使用:

来获取$ modalInstance的访问权限
var modalInstance = $injector.get('$modalInstance');
modalInstance.dismiss('cancel');

但这也行不通。在任何一种情况下,进样器都无法解析$ modalInstance。

还有另一种方法可以用$ modalInstance关闭对话框吗?或者有没有办法以某种方式有条件地注入$ modalInstance,或通过触发其他事件(例如按键)来关闭对话框?

1 个答案:

答案 0 :(得分:0)

你可以试试这样的东西,但它有点味道。 plunker

app.js

var app = angular.module('plunker', []);
function Ctrl() {
  return function(){
    arguments[0].name = 'World';
    console.log( arguments )
  }
}
var m1 = new Ctrl();
m1.$inject = ['$scope'];
var m2 = new Ctrl(); 
m2.$inject = ['$scope', '$injector'];


app.controller('MainCtrl', m2);
app.controller('Main2Ctrl', m1);

的index.html

<p ng-controller="MainCtrl">Hello {{name}}!</p>
<p ng-controller="Main2Ctrl">Hello2 {{name}}!</p>

您会看到他们按预期注入依赖项,但argument[I]感觉不对。我不建议做一些如图所示的事情。只需使用原型来定义两个控制器来定义常见行为。