Jquery 在angularjs中访问单击的元素
我对AngularJS比较陌生,我怀疑自己没有掌握一个概念。我也在使用Twitter引导,我已经加载了jQuery 工作流:用户单击列表中的链接,“主”部分更新,链接用户单击获得活动类 基本HTML标记:Jquery 在angularjs中访问单击的元素,jquery,angularjs,Jquery,Angularjs,我对AngularJS比较陌生,我怀疑自己没有掌握一个概念。我也在使用Twitter引导,我已经加载了jQuery 工作流:用户单击列表中的链接,“主”部分更新,链接用户单击获得活动类 基本HTML标记: <ul class="list-holder" ng-controller="adminController"> <li><a ng-click="setMaster('client')">Clients</li> <li>
<ul class="list-holder" ng-controller="adminController">
<li><a ng-click="setMaster('client')">Clients</li>
<li><a ng-click="setMaster('employees')">Employees</li>
<li><a ng-click="setMaster('etc')>Etc...</li>
</ul>
但是我不知道如何集成Angular和jQuery来完成这项工作,因为我正在使用Angular从服务器获取主列表(JSON格式)并更新页面上的列表
我如何整合这个?我似乎找不到我在angular controller函数中单击过的元素
控制器:
function adminController($scope)
{
$scope.setMaster = function(obj)
{
// How do I get clicked element's parent li?
console.log(obj);
}
}
AngularJS允许您使用以下语法(请注意
setMaster
函数的$event
参数;此处的文档:)获得点击事件(以及点击事件的目标):
这不是解决这个问题的很有角度的方法。AngularJS的重点是模型操作。一种是对模型进行变异,让AngularJS计算渲染
AngularJS解决此问题的方法(无需使用jQuery和而无需传递$event
参数)是:
<div ng-controller="AdminController">
<ul class="list-holder">
<li ng-repeat="section in sections" ng-class="{active : isSelected(section)}">
<a ng-click="setMaster(section)">{{section.name}}</a>
</li>
</ul>
<hr>
{{selected | json}}
</div>
以下是完整的JSFIDLE:FYI:$event不起作用,除非它在标记中传递:
ng click=“setMaster(section,$event)”
只是一个提示。实际上,它必须传递给函数。但实际上,在控制器中引用类似于dom的东西可能不是最好的主意。通常,当使用$event时,它处于停止传播或类似情况的上下文中:单击“仅限我”
我在使用$event.target时遇到问题,因为我的按钮中有一个图标。因此,有时目标结果是按钮,有时是图标(取决于我单击的位置)。我使用$event.currentTarget而不是target,它工作起来很有魅力。虽然像这样使用$event.target
可能不是“有角度的方式”,但我觉得拥有一个大的ng repeat
列表,每个项目都需要一个监听器来评估更改,这不是很有效吗?单击一个元素意味着整个列表中的每个项目都必须重新计算,对吗?--为什么不使用$event.target
将一个项目作为目标来切换CSS类呢。你怎么认为?我正在开发一个Phonegap应用程序,需要尽可能地调整性能。我还建议使用$event.currentTarget
而不是$event.target
。如果具有ng click的元素具有子元素,则如果单击子元素,$event.target
将成为子元素<代码>$event.currentTarget将始终以指定的ng单击为目标元素。
function AdminController($scope) {
$scope.setMaster = function(obj, $event){
console.log($event.target);
}
}
<div ng-controller="AdminController">
<ul class="list-holder">
<li ng-repeat="section in sections" ng-class="{active : isSelected(section)}">
<a ng-click="setMaster(section)">{{section.name}}</a>
</li>
</ul>
<hr>
{{selected | json}}
</div>
$scope.setMaster = function(section) {
$scope.selected = section;
}
$scope.isSelected = function(section) {
return $scope.selected === section;
}