Angularjs 在角度指令的链接函数中使用ng click vs bind
在link函数中,是否有一种更“角度”的方式将函数绑定到click事件 现在,我正在做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); } });
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()中使用它。