2

我正在玩AngularJS。我正在使用控制器和 templateUrl 来自动完成工作:) 目前布局只有<div ng-view></div>指令,所有的东西都加载到其中。

我想打开模态(Bootstrap 或 jQuery UI,没关系)并在那里在模态的主体内)加载由给定链接指定的控制器。

就像我的 main 中的每个链接“打开”(加载模板并进行所有 DOM 编译和链接)ng-view一样,我希望在模态中打开一些链接。

我已经检查了 AngularStrap 和 Angular-UI Bootstrap 提供的功能,但它们都没有我想要的东西。

AngularStrap 可以获取新的部分模板,但不执行新的控制器。

是否有任何解决方案/片段可以在 Modal/Dialog 中执行第二个控制器?

4

3 回答 3

12

这是一个 plnkr,它演示了使用 angular + ui-bootstrap 来启动一个带有它自己的模板和控制器的对话框。

听起来您对控制器和 DOM 之间的关系有些困惑。控制器并不存在于 DOM 中,事实上,我们试图让这两个东西保持不同。相反,DOM 与 $scope 相关联,该 $scope 由...(您猜对了...)控制器控制。

因此,在示例中,控制器在对话框元素添加到 DOM 时被加载,但是控制器并没有以任何有意义的方式“在对话框中打开”。"DialogCtl"通过替换"DemoCtl"为演示的第 17 行,该对话框可以很容易地使用主应用程序正在使用的同一控制器。我想说的是控制器和对话框是独立的。对话框不执行控制器,而是$scope由一个控制器管理。

更新:我刚刚发现该示例有点错误,如果您关闭对话框然后尝试重新打开它,则会显示模态但不显示对话框。我现在正在尝试解决这个问题,我不确定发生了什么...

更新 2:我认为无法重新加载对话框与模板缓存有关。在这个 plnkr中,您看到我在查询字符串中添加了一个“缓存破坏器”,并且对话框重新加载,但模态背景没有。ui-bootstrap 页面上的示例可以毫无问题地加载和重新加载,但它们使用的是硬编码模板(而不是模板 url)。我也无法在 plnkr 中使用它。哦,在最前沿工作的乐趣:-/

更新 3:我不知道发生了什么,但发布了这个问题以寻求帮助使用 $dialog 多次打开同一个对话框

于 2013-06-02T20:34:47.083 回答
0

很明显,该$dialog指令不存在于当前版本的ui-bootstrap. http://angular-ui.github.io/bootstrap (0.11)

一个替代指令可能是modalhttp ://angular-ui.github.io/bootstrap/#/modal

这是一个 Plunker 看看,它是如何工作的。 http://plnkr.co/edit/?p=preview

于 2014-07-30T12:30:05.293 回答
0
$mdDialog.show({
                locals: {alert:"message"},
                controller: DialogController,
                templateUrl: 'apps/sidebar/views/dialog1.tmpl.html',
                parent: angular.element(document.body),
                clickOutsideToClose:true
            })
于 2016-01-08T11:04:55.000 回答