弹出窗口最优雅的方式

Bru*_*uno 178 javascript model-view-controller popup show-hide angularjs

我有这个AngularJS应用程序.一切正常.

现在我需要在特定条件成立时显示不同的弹出窗口,我想知道什么是最好的方法.

目前我正在评估两个选项,但我绝对愿意接受其他选择.


选项1

我可以为弹出窗口创建新的HTML元素,并直接从控制器附加到DOM.

这将打破MVC设计模式.我对这个解决方案不满意.


选项2

我总是可以在静态HTML文件中插入所有弹出窗口的代码.然后,使用ngShow,我可以隐藏/只显示正确的弹出窗口.

此选项不是真正可伸缩的.


所以我很确定必须有更好的方法来实现我想要的.

pko*_*rce 88

根据我迄今为止对AngularJS模态的经验,我认为最优雅的方法是一个专用服务,我们可以提供一个部分(HTML)模板以模态显示.

当我们考虑它时,模态是一种AngularJS路线,但只是在模态弹出窗口中显示.

AngularUI引导程序项目(http://angular-ui.github.com/bootstrap/)具有出色的$modal服务(以前称为版本0.6.0之前的$ dialog),它是一项服务的实现,用于将部分内容显示为一个模态弹出窗口.

  • $ dialog现在是$ modal (10认同)
  • http://weblogs.asp.net/dwahlin/building-an-angularjs-modal-service我发现这个艺术非常有用. (2认同)

Bar*_*art 29

这很有趣,因为我正在学习Angular,并且正在Youtube上观看他们频道的一些视频.发言者在28:30分钟左右的视频中提及了您的确切问题https://www.youtube.com/watch?v=ZhfUv0spHCY#t=1681.

它归结为将特定的代码片段放在服务中而不是控制器中.

我的猜测是将新的弹出元素注入DOM并将它们分开处理,而不是显示和隐藏相同的元素.这样你就可以拥有多个弹出窗口.

观看整个视频也非常有趣:-)

  • 为youtube链接+1.这是一个非常有用的视频. (2认同)
  • Misko是棱角分明的种子!(bwa哈哈).说真的.把他的话当作角的权威来源. (2认同)

Ket*_*tan 14

  • 创建一个'popup'指令并将其应用于弹出内容的容器
  • 在指令中,将内容与其下方的掩码div一起包装在绝对位置div中.
  • 可以根据需要在指令中移动DOM树中的2个div.指令中的任何UI代码都可以,包括将弹出窗口定位在屏幕中心的代码.
  • 创建一个布尔标志并将其绑定到控制器.此标志将控制可见性.
  • 创建绑定到OK/Cancel功能等的范围变量.

编辑以添加高级示例(非功能性)

<div id='popup1-content' popup='showPopup1'>
  ....
  ....
</div>


<div id='popup2-content' popup='showPopup2'>
  ....
  ....
</div>



.directive('popup', function() {
  var p = {
      link : function(scope, iElement, iAttrs){
           //code to wrap the div (iElement) with a abs pos div (parentDiv)
          // code to add a mask layer div behind 
          // if the parent is already there, then skip adding it again.
         //use jquery ui to make it dragable etc.
          scope.watch(showPopup, function(newVal, oldVal){
               if(newVal === true){
                   $(parentDiv).show();
                 } 
              else{
                 $(parentDiv).hide();
                }
          });
      }


   }
  return p;
});
Run Code Online (Sandbox Code Playgroud)


Nik*_*Dow 14

请参阅 http://adamalbrecht.com/2013/12/12/creating-a-simple-modal-dialog-directive-in-angular-js/, 了解使用Angular进行模态对话的简单方法,无需引导程序

编辑:我从那以后一直在使用来自http://likeastore.github.io/ngDialog的 ng-dialog,它非常灵活且没有任何依赖关系.

  • 没错,但我认为不止一个弹出窗口可能是一个糟糕的用户界面. (3认同)

小智 7

Angular-ui带有dialog指令.使用它并将templateurl设置为你想要包含的任何页面.这是最优雅的方式,我也在我的项目中使用它.您可以根据需要为对话框传递其他几个参数.

  • angular-bootstrap 0.6以上用$ modal取代了$ dialog.这意味着您需要更改使用$ dialog的所有代码,因为它已被弃用并将其写入$ modal (5认同)