templates - Angular js 指令动态模板绑定(bind)

标签 templates angularjs dynamic directive

我有一个如下所示的模板:

scope:{
  localClickFunc: "&click",
  myLocalDbClickFunc: "&dblclick"
} ...

 <myButton  ng-click="localClickFunc($event)" ng-doubleckick="myLocalDbClickFunc($event)"/>

还有许多其他事件(鼠标悬停等)

我的 localClickFunc 与 Controller 函数绑定(bind)在范围指令中(对于我的情况,它们可以与“=”绑定(bind),这并不重要)。

问题是,在使用此“myButton”指令时,并非所有属性都是必需的。如果我将它与所有其他事件一起使用,则将通过 Angular 向 noop 函数注册并触发。

我的屏幕上可以有多达 1000 个按钮。解决这个问题的方法是什么?有条件模板吗?

最佳答案

作用域绑定(bind)定义中的 ? 使该属性成为可选属性。

但是,就 Angular 而言,函数绑定(bind) (&) 始终是可选的。 IE。如果您没有在此绑定(bind)中指定函数,Angular 不会提示,并且无论如何它都会将函数放入指令的范围内。因此,您不能编写 if(scope.localClickFunc == null ) 来检查其是否存在。

我建议使用可选绑定(bind) =? 来指定回调。通过这种方式,您将能够检查绑定(bind)是否存在的范围,并且仅当它存在时,才将其绑定(bind)到实际的 DOM 事件。示例代码:

scope:{
    localClickFunc: "=?click",
    localDbClickFunc: "=?dblclick"
},
link: function(scope, element, attrs) {
    ...
    if( scope.localClickFunc != null ) {
        element.on("click", scope.localClickFunc);
    }
    ...
}

然后使用该指令:

<myButton click="localClickFunc($event)"
          dblclick="myLocalDbClickFunc($event)"
/>

您可以指定任何或所有属性,并且处理程序将相应地安装。

关于templates - Angular js 指令动态模板绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19244163/

相关文章:

javascript - 使用 AngularJS 跟踪和统计点击次数并发布到 MongoDB

javascript - Angular Accordion 不关闭

javascript - 如何在 Javascript/AngularJS 中动态设置 foo 等于对象属性名称?

java - 在Java中实例化大量子类的最有效方法?

c++ - 重载运算符 & 继承 & 模板(一个强大的组合)

c++ - 检查输入的类型是否正确

javascript - 应用程序配置中的 Angularjs Controller 名称与 ng-controller

php - 脚本执行多长时间才算太长?

swift - 为什么我的模板不适用于 JSONDecodable

c++ - 模板重载解析: what happens when multiple templates match?