我正在调整一个相当新的应用程序角度。Angular&jQuery选择器
在这个程序中,我有一个菜单在左边。当用户点击左侧菜单中的类别时,应用程序的中心部分会发生变化。没有什么复杂的。
角之前,我曾经明确地写在标签左侧菜单中的每一个元素:
<li class="menu-element" data-category="home"><a href="#"><span class="glyphicon glyphicon-home"></span>Home</a>
</li>
<li class="menu-element" data-category="news"><a href="#"><span class="glyphicon glyphicon-comment"></span>News</a>
</li>
<li class="menu-element" data-category="brands"><a href="#"><span class="glyphicon glyphicon-tower"></span>Brands</a>
</li>
<li class="menu-element" data-category="activity"><a href="#"><span class="glyphicon glyphicon-flash"></span>Activity</a>
</li>
[...]
然后用jQuery添加行为:
$(".menu-element").click(function() {
[..]
});
现在,我的角度重写。我在一个控制器声明菜单元素:
var ambasdrApp = angular.module('myApp', []);
myApp.controller('categoryListCtrl', function ($scope) {
$scope.categories = [
{'category': 'home', icon :'home', text: 'Home'},
{'category': 'news', icon :'comment', text: 'News'},
{'category': 'brands', icon :'tower', text: 'Brands'},
{'category': 'activity', icon :'flash', text: 'Activity'},
];
});
然后我用NG-重复指令替换HTML标签:
<li ng-repeat="category in categories" class="menu-element ng-scope" data-category="{{category.category}}">
<a href="#"><span class="glyphicon glyphicon-{{category.icon}}"></span>{{category.text}}</a>
</li>
它的工作原理:该元素在左边的菜单看起来像以前一样。
问题:添加“onClick”行为的jQuery代码片段不再有效。我想,当jQuery的一段代码执行,菜单元素还不存在。
- 一种解决方法是在
ng-repeat
指令中添加onClick=""
。这会产生一些<li onClick="[...]">
,但我认为它是邪恶的。我宁愿在* .js文件中隔离js。 - 另一个解决方案是在执行
ng-repeat
指令后执行JQuery代码片段,但我不知道如何挂钩。
您将如何使它工作?
它引发语法错误,然后为每个元素多次触发'click()'。错误:错误:[$ parse:syntax] http://errors.angularjs.org/1.3.12/$parse/syntax?p0=%7B&p1=invalid%20key&p2=2&p3=%7B%7Bcategory.click()%7D %7D&p4 =%7Bcategory.click()%7D%7D – 2015-02-07 19:38:13
@ArnaudDenoyelle感谢您的接触 - 我在'ng-click'定义中有多余的花括号。答案已被编辑以纠正该问题。顺便说一下,如果您的所有类别都具有相同的点击功能,那么您也可以在控制器范围内定义该功能一次,并且每个类别项目都会引用它。 – rchang 2015-02-07 19:59:13
它的工作,谢谢队友!我在控制器中定义了'$ scope.onClick = function(){...}',并在模板中使用了'ng-click =“onClick()”'。因此,如你所说,它避免了为每个元素重复'click = function(){}'。 – 2015-02-07 20:07:12