AngularJS - 在对话框中打开控制器(动态加载模板)

时间:2013-06-02 19:17:58

标签: javascript twitter-bootstrap angularjs angularjs-directive javascriptmvc

我正在玩AngularJS。我正在使用控制器和templateUrl自动完成任务:) 目前,布局只有<div ng-view></div>指令,所有内容都加载到该指令中。

我想打开模态(Bootstrap或jQuery UI,无关紧要)并加载那里在模态体内)指定的控制器链接。

就像我的主ng-view中的每个链接“打开”(加载模板并执行所有DOM编译和链接)一样,我想要在模式中打开一些链接。

我已经查看了AngularStrap和Angular-UI Bootstrap提供的内容,而且它们都没有我想要的内容。

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

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

3 个答案:

答案 0 :(得分:12)

Here's a plnkr演示使用angular + ui-bootstrap启动带有自己的模板和控制器的对话框。

听起来你对控制器和DOM之间的关系有点困惑。控制器不在DOM内部,事实上,我们正试图保持两个不同的东西。相反,DOM与$ scope关联,该范围由......(你猜对了......)控制器控制。

因此,在示例中,当对话框元素添加到DOM时加载控制器,但是,控制器不是以任何有意义的方式“在对话框中打开”。通过在演示的第17行上用"DialogCtl"替换"DemoCtl",该对话框可以轻松使用主应用程序使用的相同控制器。我想说的是控制器和对话框是独立的。对话框不执行控制器,而是消耗$scope一个。{/ p>

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

更新2:我认为无法重新加载对话框与模板缓存有关。在this plnkr中,您看到我在查询字符串中添加了“缓存破坏者”,并且对话框重新加载,但模态背景却没有。 example on the ui-bootstrap页面可以加载&amp;重新加载没有问题,但他们使用的是硬编码模板(而不是模板网址)。我也无法在plnkr中工作。哦,在前沿工作的乐趣: - /

更新3:我无法弄清楚发生了什么,但发布了这个问题寻求帮助Opening the same dialog multiple times with $dialog

答案 1 :(得分: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

答案 2 :(得分:0)

$mdDialog.show({
                locals: {alert:"message"},
                controller: DialogController,
                templateUrl: 'apps/sidebar/views/dialog1.tmpl.html',
                parent: angular.element(document.body),
                clickOutsideToClose:true
            })