因为刚刚接触 Angular,所以有些概念还很模糊,对于这个问题尝试通过 Google 查找答案,但并未找到合适的解答,所以想在这里请教一下各位,这里是一个大概的代码:
<p ng-repeat="item in list" class="need-another-js"></p>
<script>
$('.need-another-js').click(function(){
// do something
})
</script>
如果把 ng-repeat
去掉,JS 代码的效果可以实现,但是加上 ng-repeat
后,效果就不存在,这里是因为 Angular 作用域的问题吗?
给我你的怀抱2017-05-15 17:05:39
이것은 범위와 관련이 없으며 순전히 jquery
=> angular
의 일반적인 오류 형식입니다. jquery
=> angular
的错误表现形式。
AngularJS
的指令,作为一种“声明式”的API,玩法和jquery
那套“命令式”API有很大区别,你在混着用的时候,很容易出错。
基本常识错误,id
是用来表示元素唯一性的,可你用在了ng-repeat
上,也就是说可能出现若干个元素的id
都是need-another-js
,这和jquery
、angular
都没关系,纯粹是html
知识上的缺失
ng-repeat
作为angular
提供的指令,需要经过angular
的compile
、linking
过程,导致,当你的$('#need-another-js').click
在为#need-another-js
元素注册事件的时候,这个元素其实还没有被angular
生成到DOM
中,这才是没生效的关键。
单就你这个例子来讲,可以做如下修改使之生效:
<p ng-repeat="item in list" class="need-another-js"></p>
不用
id
用class
<script>
$(document).on('click', '.need-another-js', function(){
// do something
});
</script>
虽然我不推荐这种写法,但你既然选择了"命令式"和声明式
API混用,想必有你的理由。
补充:
关于angular
AngularJS
의 지침은 "선언적" API로서 jquery
의 "명령형" API와 매우 다릅니다. 이를 혼합하면 실수하기 쉽습니다. . <올>
id
는 요소의 고유성을 나타내는 데 사용되지만 ng-repeat
에 사용했기 때문에 여러 개가 있을 수 있습니다. id
는 모두 need-another-js
입니다. 이는 jquery
또는 angular
와 관련이 없습니다. 순전히 html
지식 부족ng-repeat
는 angular
에서 제공하는 명령으로 angular
의 컴파일
을 거쳐야 합니다. 및 연결
프로세스로 인해 $('#need-another-js').click
이 #need-another-에 대한 이벤트를 등록할 때 발생합니다. js
요소 당시 이 요소는 angular
에 의해 DOM
에 실제로 생성되지 않았습니다. 이것이 실패의 핵심입니다. 귀하의 예를 들어 다음과 같이 수정하면 효과적입니다.
으아악🎜으아악 🎜이러한 작성 방식을 권장하지는 않지만 "명령형" API와class
대신id
를 사용하세요🎜
선언적
API를 혼합하기로 선택하셨으므로 이유가 있을 것입니다. 🎜
🎜추가됨: 🎜
🎜 angular
의 작동 방식과 관련하여 공식 웹사이트에서 다음 소개를 읽으면 이제 막 시작한 학생들에게 도움이 될 것 같습니다. 🎜
🎜🎜🎜🎜🎜
🎜문서 주소: Concepts🎜PHP中文网2017-05-15 17:05:39
Angular를 배울 때 jq에서 angle로 바로 전환했습니다. Angular는 jq가 할 수 있는 모든 것을 할 수 있습니다
过去多啦不再A梦2017-05-15 17:05:39
ng-repeat는 dom 요소를 동적으로 추가하는 것입니다. click 메서드를 사용하여 동적으로 추가된 요소에 이벤트를 바인딩하면 트리거되지 않습니다. Jquery를 사용하고 싶다면 leftstick에서 제안한 방법을 사용하지만 mumofa에서 제안한 각도 방법을 사용하는 것이 좋습니다