【发布时间】:2016-02-15 07:03:27
【问题描述】:
我是 AngularJS 的新手,我对如何在 Angular 中处理事件有以下疑问。
所以我知道在视图中我是否有这样的东西:
<input type="text" ng-model="handle" />
这意味着在 dom 中的这个输入元素和 Angular $scope 中的 handle 变量之间存在 2 路绑定,例如:
$scope.handle = '';
因此,此输入对象发生的任何更改都意味着 $scope 中的句柄属性的更改,反之亦然。
所以,在 Angular 应用程序中,我可以显式声明一个 whatcher
// I explicitly declare a whatcher on the handle property: when the value of this propertu change the function() is performed:
$scope.$watch('handle', function(newValue, oldValue) {
console.info('Changed!');
console.log('Old:' + oldValue);
console.log('New:' + newValue);
});
所以它应该与手动添加经典的 vanilla JavaScript EventListener 的含义相同(通过 addEventListener() 在我想在经典的旧 vanilla JavaScript 应用程序(不使用 Angular)中观察的对象上。
当输入值发生变化时,将执行与 whatcher 关联的函数。
好的,这对我来说很清楚。
现在我说我也可以做这样的事情。
在 HTML 代码中我可以有类似的东西:
<input type="button" value="Click Me" ng-click="alertClick()" />
在 Angular 控制器中,我会有类似的东西:
$scope.alertClick = function() {
alert("Clicked !!!");
}
因此,当按钮上有点击事件时,ng-Click 指令似乎执行了一个 $scope 字段的功能。
但是我可以执行与第一个示例中相同的操作吗?如果按钮通过 ng-model="handle" 指令关联到模型对象,我可以在按钮上声明一个 whatcher 吗?
什么时候使用第一种方法更好,什么时候使用第二种方法更好地处理AngularJS中的事件?
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope javascript-framework