我正在将 Angularjs 用于 Web 应用程序。我已经尝试寻找解决我的问题的方法,并且似乎 Angularjs 并不能提供一种简单的方法来访问 ng-Repeat 中新创建的 DOM 元素。
我准备了一个 jsfiddle 来显示实际问题。这是链接:http: //jsfiddle.net/ADukg/956/
请让我知道如何在 ng-repeat 中选择新的 DOM 元素。
我正在将 Angularjs 用于 Web 应用程序。我已经尝试寻找解决我的问题的方法,并且似乎 Angularjs 并不能提供一种简单的方法来访问 ng-Repeat 中新创建的 DOM 元素。
我准备了一个 jsfiddle 来显示实际问题。这是链接:http: //jsfiddle.net/ADukg/956/
请让我知道如何在 ng-repeat 中选择新的 DOM 元素。
为了扩展我的评论,我更新了您的小提琴以显示一个简单的指令实现,该指令提醒元素的类。
http://jsfiddle.net/ADukg/994/
原评论:
关于控制器中的 dom 操作,这里说你根本不应该这样做。它应该放在指令中。控制器应该只包含业务逻辑。
为什么它不起作用,我不知道,但这可能是因为此时 Angular 仍在运行它自己的东西。
有两种方法可以做到这一点:
1 ng-init
function controller($scope) {
$scope.items = [{id: 1, name: 'one'}, {id: 2, name: 'two'}];
$scope.initRepeaterItem(index, item) {
console.log('new repeater item at index '+index+':', item);
}
}
<ul>
<li ng-repeat="item in items" ng-init="initRepeaterItem($index, item)"></li>
</ul>
2 MutationObserver稍微复杂
一点<ul>
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// you get notified about DOM mutations here
// check mutation.type if it was an insertion
console.log(mutation.target.nodeName, mutation.type, mutation);
});
});
var config = {childList: true, attributes: false, characterData: false,
subtree: false, attributeOldValue: false, characterDataOldValue: false};
observer.observe(element[0], config);
演示 http://plnkr.co/h6kTtq 文档 https://developer.mozilla.org/en/docs/Web/API/MutationObserver 浏览器支持 http://caniuse.com/mutationobserver