Angularjs 在角度指令的链接函数中使用ng click vs bind

Angularjs 在角度指令的链接函数中使用ng click vs bind,angularjs,angularjs-directive,Angularjs,Angularjs Directive,在link函数中,是否有一种更“角度”的方式将函数绑定到click事件 现在,我正在做 myApp.directive('clickme', function() { return function(scope, element, attrs) { scope.clickingCallback = function() {alert('clicked!')}; element.bind('click', scope.clickingCallback); } });

在link函数中,是否有一种更“角度”的方式将函数绑定到click事件

现在,我正在做

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

这是一种矫揉造作的方式还是一种丑陋的手法?也许我不应该这么担心,但我对这个框架还不熟悉,我想知道做事情的“正确”方式,尤其是在框架向前发展的时候

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

如果您只是在指令中定义事件处理程序, 不过,您不必在范围上定义它。 下面就可以了

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

您可以在指令中使用控制器:

angular.module('app',[])
.directive('appClick',function(){
返回{
限制:“A”,
范围:正确,
模板:“单击我已单击{{Clicked}}}次”,
控制器:函数($scope$element){
$scope.clicked=0;
$scope.click=function(){
$scope.clicked++
}
}
}
});


更多关于中的指令。对我来说非常有用的是官方博客上的视频。

难道不应该是:

<button ng-click="clickingCallback()">Click me<button>
点击我
为什么只想编写一个新指令来将单击事件映射到作用域上的回调?ng click已经为您完成了此操作。

myApp.directive(“clickme”,function()){
myApp.directive("clickme",function(){
    return function(scope,element,attrs){
        element.bind("mousedown",function(){
             <<call the Controller function>>
              scope.loadEditfrm(attrs.edtbtn); 
        });
    };
});
返回函数(范围、元素、属性){ bind(“mousedown”,function()){ 作用域loadEditfrm(属性edtbtn); }); }; });

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

在这种情况下,不需要指令。这就是工作:

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

增量
计数:{{count}

来源:

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


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

在clickingCallback中,如果您要更改任何模型/范围数据,则需要调用scope.$apply(),或将方法的内容放入scope.$apply(function()){…contents here…});我实际上想将ng click属性添加到元素本身,而不是template元素(在您的例子中是button)。您知道怎么做吗?没关系,我已经解决了-我可以使用“replace”指令中的选项。@Maxim Grach为什么不把按钮HTML放在HTML中呢?显示一个调用控制器方法的按钮似乎需要做很多工作,在查看HTML时就不那么明显了。PS我也在学习angular。@turbo2oh这个例子非常简单,脱离了现实生活。但它展示了如何使用angular指令。@maximGrach使用作用域:{}将隔离作用域,而使用true则允许共享作用域。我也很好奇关于这一点的看法。
ng单击
元素.bind()比较
也许只是为了使该部分可重用,可在其他地方重复代码。@Estevez这正是我的使用案例。两者都是合适的,你可以继续做你认为合适的事情。你的示例中唯一的区别是,
bind
开始了一个
摘要
循环;这可能是你想要的,但也可能是你想要的are.Umur,你的意思是说
bind
不会启动摘要周期吗?我在需要避免昂贵的摘要周期时使用它,例如需要用户操作的大型数据集。唯一的区别是我在link:function()中使用它。