【问题标题】:AngularJS - open controller in a dialog (template loaded dynamically)AngularJS - 在对话框中打开控制器(动态加载模板)
【发布时间】:2013-06-02 19:17:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    更新 3:我不知道发生了什么,但发布了这个问题以寻求帮助 Opening the same dialog multiple times with $dialog

    【讨论】:

    • 谢谢!我现在正在尝试理解演示 :) 顺便说一句,为什么 index.html 中有 ng-include="index.html" ?可能我理解错了,我知道控制器应该和模板分开,我说的“在对话框中控制打开”的意思是对话框内容不仅是一个单独的(部分)模板,而且它具有单独的范围并且正在被在单独的控制器上下文(即 EditCtrl)下执行,因此我不必使用应该属于 EditCtrl 的“保存”方法污染 ListCtrl 逻辑,如果我使用 ng-include 指令则必须这样做。跨度>
    • 那是假代码,我删除了它。这是不必要和错误的,我仍然不确定为什么对话框不会重新启动......
    • @Jason 似乎没有可靠的方法让它在 IE 上运行。单击“启动对话框”显示对话框两次,但是,我们得到以下错误:错误:达到 10 $digest() 迭代。正在中止! 现在,如果您清除浏览器临时数据并重新启动 IE,它将再次工作(点击 2 次),我检查了您的“更新 3”,这是有效的,但不是 有什么问题
    • 我用href=""而不是href="#"创建了一个更新的plunker,现在可以重新打开它。 (从angularjs - Opening the same dialog multiple times with $dialog 得到解决方案)。不过,我们都应该注意,$dialog 已从 ui-bootstrap 中消失。这是 Dan Wahlin 的解决方法creating $dialog from $modal。不过原则还是不错的。
    • @Jason 我已经更新为 angular 1.4.8ui-boostrap 1.2.4 plnkr.co/edit/I354huESaeHKNNCuV7hk?p=preview
    【解决方案2】:

    很明显,$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

    【讨论】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2013-10-19
      相关资源
      最近更新 更多