簡體   English   中英

自定義ng-enter指令未將$ event從html傳遞到控制器

[英]Custom ng-enter directive not passing $event from html to the controller

我正在使用一個自定義指令,該指令可檢測用戶何時按下Enter鍵,然后調用周圍表單元素的ngSubmit調用的相同函數

下面是我的問題的演示,我需要從控制器內部訪問事件,但始終未定義。

有人遇到過這個問題嗎? 有什么問題 為什么會這樣呢? 引用的鏈接與說明一樣好。

有沒有更好的方法可以將方法調用復制兩次? (次級)

 var app = angular.module('app', []); app.controller('submitCtrl', ['$scope', function($scope) { $scope.submitContent = function(event) { //This is what I am looking for. console.log(event); //This is undefined. } }]); app.directive('mvEnter', function() { return function(scope, element, attrs) { element.bind('keydown keypress', function(event) { if (event.which === 13) { scope.$apply(function() { scope.$eval(attrs.mvEnter); }); event.preventDefault(); } }); }; }); 
 <!DOCTYPE html> <html> <head></head> <body ng-app='app'> <div ng-controller="submitCtrl"> <textarea mv-enter="submitContent($event);"></textarea> </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> </body> </html> 

$eval方法看起來像這樣$scope.$eval(expr, locals) ,這意味着您可以使用$eval函數的locals對象,其中的鍵將是參數名稱( $event )。

scope.$eval(attrs.mvEnter, {$event: event});

預習

我更改了一些您的代碼段。 看看並告訴我們這是否對您有用! :)

說明:$ scope.eval,如函數名所示,將評估您傳遞的表達式。 如果表達式是函數的原型,則該方法將返回您評估的函數,以便您可以執行它。 因此,您具有要執行的功能和所需的參數,因此... 1 +1 = 2 jajajajaja。

希望這對您有所幫助。 如果您有任何問題,請問:)

 var app = angular.module('app', []); app.controller('submitCtrl', ['$scope', function($scope) { $scope.submitContent = function(event) { //This is what I am looking for. console.log(event); //This is undefined. } }]); app.directive('mvEnter', function() { return function(scope, element, attrs) { element.bind('keydown keypress', function(event) { if (event.which === 13) { scope.$apply(function() { var directiveFunction = scope.$eval(attrs.mvEnter); if (angular.isFunction(directiveFunction)) { directiveFunction(event); } }); event.preventDefault(); } }); }; }); 
 <!DOCTYPE html> <html> <head></head> <body ng-app='app'> <div ng-controller="submitCtrl"> <textarea mv-enter="submitContent"></textarea> </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> </body> </html> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM