当前位置: 首页 > 面试题库 >

AngularJS处理这种模态的方式是什么

程钧
2023-03-14
问题内容

我知道您不应该将显示逻辑放在控制器中,并且我正在努力使用正确的AngularJS方法来实现此目的。

我正在模态内展示表格。我正在使用Zurb Foundation的揭示模式。

标记:

<div class="button" ng-click="modalAddWidget">Add Widget</div>
<div id="modalAddWidget" class="reveal-modal">
  <h6>New Widget</h6>
  <form>
    <fieldset>
      <legend>Widget Name</legend>
      <input type="text" ng-model="ui.add_widget_value" />
    </fieldset>
    <div class="small button right" ng-click="addWidget()">Add Widget</div>
    <div class="small button right secondary" ng-click="addWidgetCancel()">Cancel</div>
  </form>
</div>

控制器:

  ...
  $scope.modalAddWidget = function() {
    $("#modalAddWidget").reveal();
  }
  $scope.addWidget = function() {
    $scope.myobject.widgets.push({"name": $scope.ui.add_widget_value});
    $scope.ui.add_widget_value = '';
    $('#modalAddWidget').trigger('reveal:close');
  }
  $scope.addBudgetCancel = function() {
    $scope.ui.add_widget_value = '';
    $('#modalAddWidget').trigger('reveal:close');
  }
  ...

注意:$ scope.ui是我用来存储UI值的对象,在用户实际单击“添加小部件”之前,该值不应绑定到我的对象

$ scope.myobj是存储我的数据的位置。

基金会的$("#modalAddWidget").reveal();职能提出了模式叠加。

由于我不应该将显示代码放入控制器中,因此正确的处理方法是什么?


问题答案:

您不想从控制器中操作DOM(甚至引用它)。

最好在此处使用指令。

app.directive('revealModal', function (){
   return function(scope, elem, attrs) {
     scope.$watch(attrs.revealModal, function(val) {
        if(val) {           
           elem.trigger('reveal:open');
        } else {
           elem.trigger('reveal:close');
        }
     });
     elem.reveal();
   }
});

然后在您的控制器中:

$scope.modalAddWidget = function (){
   $scope.ui = { add_widget_value: '' };
   $scope.showModal = true;
};

$scope.addWidget = function (){
    $scope.myobject.widgets.push({"name": $scope.ui.add_widget_value});
    $scope.ui.add_widget_value = '';
    $scope.showModal = true;
};

在您的HTML中

<div class="button" ng-click="modalAddWidget()">Add Widget</div>
<div id="modalAddWidget" class="reveal-modal" reveal-modal="showModal">
  <h6>New Widget</h6>
  <form name="addWidgetForm" ng-submit="addWidget()">
    <fieldset>
      <legend>Widget Name</legend>
      <input type="text" name="widgetValue" ng-model="ui.add_widget_value" required />
      <span ng-show="addWidgetForm.widgetValue.$error.required">required</span>
    </fieldset>
    <button type="submit" class="small button right">Add Widget</button>
    <div class="small button right secondary" ng-click="showModal = false;">Cancel</div>
  </form>
</div>

基本上,您将在范围内设置一个布尔值以显示和隐藏模态。(我不确定透露模态的打开/关闭机制,所以我在上面的代码中猜测)。

还:我努力在其中添加一些验证。



 类似资料:
  • 问题内容: 注意:这与显示AngularJS的模式对话框无关,该主题有很多问题和答案! 此问题是关于如何在页面上的模式对话框中对“确定”和“取消”做出反应。假设您有一个仅包含一个变量的范围: 如果我在页面上为您提供了一个模式对话框,并在该对话框中使用ng-model =“ description”,则您所做的所有更改实际上都是在您键入内容时实时对说明本身进行的。不好,因为那您如何取消该对话框? 有

  • 问题内容: 我已经在多个地方阅读了诺言处理程序模式,但我不知道它是什么。建议我在如下代码中使用它: 什么是Proposal Disposer模式,在这里如何应用? 注意-在本机的Promise中,我做为“添加返回值但执行操作的拒绝和实现处理程序”。在这种情况下,我会使用蓝鸟。 问题答案: 您的代码有问题 上述方法的问题在于,如果您在每次执行操作后都忘记释放连接,则可能会导致资源泄漏,当应用程序耗尽

  • 问题内容: 我有这个HTML: 控制器是: 该服务运行良好,因此我不在此处粘贴代码…在这种情况下,结果是“ Hello world! ”。我以这种方式更改了HTML: 但这是行不通的。 我改变了控制器: 然后是HTML 这可行! 所以我的问题是: 这是直接在HTML中直接使用服务功能的唯一方法,还是我遗漏了某些东西? 问题答案: AngularJS模板只能调用作用域上可用的函数 。因此,无论采用哪

  • 问题内容: 最近,我遇到了AngularJS Strict DI模式。使用它的目的和好处是什么?通过特别在移动设备上使用它,我们是否可以显着提高性能? 我尝试将其应用于代码,编写代码时未做任何注释。但是,我要压缩代码,并在构建过程中进行ng- annotate。但是,为什么在将严格的DI模式添加到代码中后,仍然出现错误消息“需要显式注释”? 问题答案: 严格的DI模式基本上在运行时发现不符合最小化

  • 本文向大家介绍AngularJS中处理多个promise的方式,包括了AngularJS中处理多个promise的方式的使用技巧和注意事项,需要的朋友参考一下 在使用AngularJS中处理promise的时候,有时会碰到需要处理多个promise的情况。 最简单的处理就是每个promise都then。如下: 有没有更好的方式? $q.all方法可以接受promise的一个数组,按如下调用: 什么

  • 问题内容: 还是Scala的新手,我现在正在寻找一种在其上实现以下代码的方法: 在Scala中实现与RetryableService实现的功能相同的最佳方法是什么? 它基本上调用N次 调用 方法,如果所有方法均失败,则引发异常,如果所有方法均失败,则继续进行。这个不返回任何内容,但是我有另一个版本可以返回值(因此,我在Java中有两个类),我相信我可以在Scala中使用单个类/函数。 有任何想法吗