【问题标题】:Closing modal dialog with shared AngularJS controller使用共享 AngularJS 控制器关闭模式对话框
【发布时间】:2015-03-04 20:04:50
【问题描述】:

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

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

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

var modalInstance = $injector.get('$modalInstance');
modalInstance.dismiss('cancel');

但这也没有用。在这两种情况下,注入器都无法解析 $modalInstance。

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

【问题讨论】:

  • 我通过使用 2 个控制器、一个模态控制器、一个非模态控制器并将我的所有控制器功能移动到服务中来完成类似操作
  • 谢谢@charlietfl,我可能会这样做。我希望有更简单的方法,但如果这是我唯一的选择,我不反对你的解决方案。

标签: angularjs angular-ui-bootstrap


【解决方案1】:

你可以试试这样的东西,但它有点臭。 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] 感觉不对。我不建议做如图所示的事情。只需使用原型来定义两个控制器来定义常见行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多