67

在链接功能中,是否有更“角度”的方式将功能绑定到点击事件?

目前,我正在做...

myApp.directive('clickme', function() {   
  return function(scope, element, attrs) {
    scope.clickingCallback = function() {alert('clicked!')};
    element.bind('click', scope.clickingCallback);   
} });

这是 Angular 的做法还是丑陋的 hack?也许我不应该这么担心,但我是这个框架的新手,想知道“正确”的做事方式,尤其是随着框架的发展。

4

6 回答 6

61

You may use a controller in directive:

angular.module('app', [])
  .directive('appClick', function(){
     return {
       restrict: 'A',
       scope: true,
       template: '<button ng-click="click()">Click me</button> Clicked {{clicked}} times',
       controller: function($scope, $element){
         $scope.clicked = 0;
         $scope.click = function(){
           $scope.clicked++
         }
       }
     }
   });

Demo on plunkr

More about directives in Angular guide. And very helpfull for me was videos from official Angular blog post About those directives.

于 2013-02-12T03:27:13.197 回答
36

我认为这很好,因为我见过很多人这样做。

但是,如果您只是在指令中定义事件处理程序,则不必在范围内定义它。跟着就好了。

myApp.directive('clickme', function() {
  return function(scope, element, attrs) {
    var clickingCallback = function() {
      alert('clicked!')
    };
    element.bind('click', clickingCallback);
  }
});
于 2013-02-12T01:32:29.297 回答
10

不应该只是:

<button ng-click="clickingCallback()">Click me<button>

为什么要编写一个新指令只是为了将单击事件映射到范围内的回调?ng-click 已经为您做到了。

于 2013-12-24T06:16:41.460 回答
0

您应该在指令中使用控制器并在模板 html 中使用 ng-click,如先前的响应所建议的那样。但是,如果您需要对事件(单击)进行 DOM 操作,例如单击按钮,想要更改按钮的颜色左右,则使用 Link 函数并使用元素来操作 dom。

如果您只想在 HTML 元素或任何此类非 dom 操作任务上显示一些值,那么您可能不需要指令,并且可以直接使用控制器。

于 2016-09-02T19:11:00.097 回答
-3

在这种情况下,不需要指令。这可以完成工作:

<button ng-click="count = count + 1" ng-init="count=0">
  Increment
</button>
<span>
  count: {{count}}
</span>

来源:https ://docs.angularjs.org/api/ng/directive/ngClick

于 2014-10-23T15:44:20.847 回答
-4
myApp.directive("clickme",function(){
    return function(scope,element,attrs){
        element.bind("mousedown",function(){
             <<call the Controller function>>
              scope.loadEditfrm(attrs.edtbtn); 
        });
    };
});

这将作为属性clickme上的 onclick 事件

于 2014-05-13T11:38:43.370 回答