javascript - 从 Angular 指令获取输入字段的值

标签 javascript angularjs

我正在使用来自 this answer 的指令在输入字段中按下回车键时运行函数。

如何将输入字段 element.val() 的值传递给指令调用的函数?或者将输入字段 element 传递给函数,以在检索后清除该值。

HTML

<input type="text" ng-enter="newField()" />

JS

app.directive('ngEnter', function() {
    return function(scope, element, attrs) {
        element.bind("keydown keypress", function(event) {
            if(event.which === 13) {
                element.val(); // value of input field

                scope.$apply(function(){
                    scope.$eval(attrs.ngEnter); // passed to this function
                });

                event.preventDefault();
            }
        });
    };
});

最佳答案

你可以这样做:

var func = scope.$eval(attrs.ngEnter);
func();

并让 Controller 负责值逻辑。请参阅下面的代码。 <强> Live demo (click).

此外,我不建议在您的自定义指令前加上 ng 前缀。我建议提出您自己的前缀作为 namespace 。 ng 是 Angular 的核心。在我的示例中,我使用的是 my-enter 而不是 ng-enter

示例标记:

  <input 
    type="text" 
    ng-model="foo" 
    my-enter="myFunc"
    placeholder="Type stuff!"
  >
  <p ng-repeat="val in cachedVals track by $index">{{val}}</p>

JavaScript:

var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {
  $scope.cachedVals = [];
  $scope.foo = '';
  $scope.myFunc = function() {
    $scope.cachedVals.push($scope.foo);
    $scope.foo = '';
  };
});

app.directive('myEnter', function() {
  return function(scope, element, attrs) {
    element.bind("keydown keypress", function(event) {
      if(event.which === 13) {
        scope.$apply(function(){
          var func = scope.$eval(attrs.myEnter);
          func();
        });
        event.preventDefault();
      }
    });
  };
});

这是一个独立范围的示例 - 您不需要 $eval

app.directive('myEnter', function() {
  return {
    scope: {
      func: '=myEnter'
    },
    link: function(scope, element, attrs) {
      element.bind("keydown keypress", function(event) {
        if(event.which === 13) {  
          scope.$apply(function(){
            scope.func();
          });  
          event.preventDefault();
        }
      });
    }
  };
});

关于javascript - 从 Angular 指令获取输入字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273582/

相关文章:

javascript - 使用 Node.js 和 AJAX 请求将 Javascript 函数移至后端

javascript - 使用函数时Jquery意外标记

javascript - 我正在尝试使用 Angular 显示 JSON 数组

angularjs - Angular 辅助函数去哪里了?

javascript - 禁用 $http 的 angularjs 错误处理方法中的自动日志记录

javascript - 无法在 React 中处理 net::ERR_CONNECTION_REFUSED

javascript - D3.js中如何使用匿名函数正确调用其他函数

javascript - 是否可以控制 typed.js 插件何时开始和停止输入文本?

angularjs - 尝试使用 templateURL 测试 AngularJS 指令

angularjs - 使用 Haml 和 Angular.js 应用程序进行 & 符号转换