【问题标题】:Is their a better way for a controller to 'call' a directive他们是控制器“调用”指令的更好方法吗
【发布时间】:2013-02-02 21:29:24
【问题描述】:

我有一个创建和管理引导模式对话框的指令。

目前我有指令监视控制器上的布尔值。然后控制器可以将其设置为 true 以显示模式对话框。

这看起来有点乱。有没有更好的办法?

执行中的指令:

<modal trigger="shouldDisplayModal" title="{{modalTitle}}" 
message="{{modalMessage}}" positiveclick="okClicked()" 
negativeclick="closed()" 
positivelabel="Ok" negativelabel="Cancel"/>

指令控制器中的手表:

// watch the trigger value. expected to be boolean
$scope.$watch('trigger',function(newValue, oldValue){                
    if (newValue)
    {
        // enable any disabled buttons 
        modalElem.find('button').removeClass('disabled');
        // show the dialog
        modalElem.modal('show');
    }
    else
    {
        // hide the dialog
        modalElem.modal('hide');
    }
});

这是一个工作示例:http://jsfiddle.net/rabidgremlin/Ya96z/31/

更新:这是一个修正的示例,它纠正了页面上多个指令的一些问题:http://jsfiddle.net/rabidgremlin/sjbCJ/1/

【问题讨论】:

  • 您最终可以查看来自angular-ui.github.com/bootstrap$dialog 服务,它允许您轻松打开模式并从控制器中收集值。这个 repo 也有一个用纯 AngularJS 编写的模式,没有 jQuery 或 bootstrap 的 JavaScript 依赖项。
  • 嗯,将其实现为服务是一个有趣的想法。我去看看。

标签: angularjs angularjs-directive


【解决方案1】:

我打算建议在你的指令模板中使用 ng-show(这就是 directive 页面上的对话框组件所做的,以及一个类似于你的 trigger 属性的 visible 属性),但是随后我看到您还需要在修改可见性之前启用一些按钮。

所以,我认为你所拥有的一切都很好,而且我不认为它是凌乱的。要么您的指令必须 $watch 某些东西,要么您可以在事件发生时创建对话框 - 这似乎是 $dialog 服务所做的,@pkozlowski 在 cmets.xml 中提到。后者不需要触发器属性。

【讨论】:

    【解决方案2】:

    就在几周前,我写了一篇关于使用 angular 和 bootstrap modals 的博客。

    我的解决方案涉及一项服务,模式的所有隐藏/显示魔法都由引导程序的 javascript 处理,而 angular 只是担心数据。

    http://willvincent.com/blog/angularjs-and-twitter-bootstrap-playing-nicely

    【讨论】:

      猜你喜欢
      • 2013-01-30
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多