【问题标题】:pass ngKeyUp function into directive将 ngKeyUp 函数传递给指令
【发布时间】:2015-11-23 02:56:05
【问题描述】:

我有一个包含输入字段的指令/模板。

输入字段有一个 ngKeyup 和一个 ngModel。

我希望将 ngKeyup 函数传递到指令中。指令/模板中输入字段上的 ngKeyup 应该调用此函数。

这个 plunker 显示选项 1 和选项 2 http://plnkr.co/edit/kN8mitdG6pK5GNqGzYw5?p=preview

选项一最简单,部分有效,函数只是通过'='传入,指令在ngKeyUp属性中引用它

指令

ngApp.directive("searchField", ['$parse',function ($parse) {

return {
    restrict: "E",
    scope: {
        myKeyUp: '=',

模板

<input type="text" ng-model="model" ng-keyup="myKeyUp" />

这部分工作,但 $event 对象没有传递。

在选项 2 中,指令从控制器接收函数作为 '&',尝试 $parse 并调用它。这根本不适合我,但我对 $parse 不是很熟悉。

ngKeyup 可以接收任何参数,例如ng-keyup(a,b,c,$index,$event)

一个关键点/要求是这个指令应该是相同的,即 myKeyUp 应该能够接受任何参数。

非常感谢任何帮助或指示。

谢谢 约翰

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    原来有一个非常简单的解决方案。

    引用问题

    我希望将 ngKeyup 函数传递到指令中。指令/模板中输入字段上的 ngKeyup 应该调用此函数。

    原来 div 可以简单地具有 ng-keyup 属性,它不必在输入字段上。 这样就彻底解决了问题。

    http://plnkr.co/edit/xTigcDaSLpL9pvRtfY5J?p=preview

    现在指令只接受模型作为参数。 ngKeyup 在指令之外。

    ngApp.directive("searchField", ['$parse',function ($parse) {
    
    return {
        restrict: "E",
        scope: {
            model: '='
        },
        templateUrl: 'searchFieldTemplate',
        replace: true,
        controller: ['$scope','$attrs', function ($scope, $attrs) {
    
        }]
      };
    
    }]);
    

    模板现在只关心模型

    <div class="searchField">
    <h4>Template</h4>
      (observe the console)
    <div>
      <input type="text" ng-model="model" />
    </div>
    

    这实际上让你考虑到它......

    【讨论】:

      【解决方案2】:

      范围内必须是“&”,因为它允许您传递函数引用。

      而你在模板中要做的是:

      <input type="text" ng-model="model" ng-keyup="myKeyUp($event)" />
      

      更新: 这是您可以采取的另一种方法:http://goo.gl/a27JrX

      【讨论】:

      猜你喜欢
      • 2013-08-25
      • 1970-01-01
      • 2015-10-05
      • 2017-10-10
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 2018-10-04
      • 2012-11-23
      相关资源
      最近更新 更多