5

我正在将 Angularjs 用于 Web 应用程序。我已经尝试寻找解决我的问题的方法,并且似乎 Angularjs 并不能提供一种简单的方法来访问 ng-Repeat 中新创建的 DOM 元素。

我准备了一个 jsfiddle 来显示实际问题。这是链接:http: //jsfiddle.net/ADukg/956/

请让我知道如何在 ng-repeat 中选择新的 DOM 元素。

4

2 回答 2

2

为了扩展我的评论,我更新了您的小提琴以显示一个简单的指令实现,该指令提醒元素的类。

http://jsfiddle.net/ADukg/994/

原评论:

关于控制器中的 dom 操作,这里说你根本不应该这样做。它应该放在指令中。控制器应该只包含业务逻辑。

为什么它不起作用,我不知道,但这可能是因为此时 Angular 仍在运行它自己的东西。

于 2012-10-07T00:05:36.433 回答
1

有两种方法可以做到这一点:

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
于 2013-12-23T11:43:54.207 回答