2012-10-06 20 views
5

Tôi đang sử dụng Angularjs cho một ứng dụng web. Tôi đã cố gắng tìm kiếm để tìm một giải pháp cho vấn đề của tôi, và có vẻ như Angularjs không tạo điều kiện dễ dàng để truy cập các phần tử DOM mới được tạo trong ng-Repeat.Chọn Các phần tử DOM mới được tạo bởi Angularjs ng-repeat

Tôi đã chuẩn bị một jsfiddle để hiển thị vấn đề thực tế. đây là liên kết: http://jsfiddle.net/ADukg/956/

Vui lòng cho tôi biết cách chọn phần tử DOM mới trong ng-repeat.

+0

Về thao tác dom trong bộ điều khiển, nó [nói ở đây] (https://groups.google.com/forum/?fromgroups=#!topic/angular/ u52B5bVzdqs) mà bạn không nên làm điều đó cả. Nó nên đi theo một chỉ thị. Tại sao nó không hoạt động, tôi không biết, nhưng có lẽ vì góc cạnh vẫn đang chạy công cụ riêng của nó vào thời điểm này. – Narretz

+0

Tôi đoán bạn sẽ có thể có được một giải pháp tốt hơn nếu bạn có thể giải thích lý do tại sao hoặc vì lý do gì bạn đang cố gắng truy cập vào phần tử dom mới. Nếu bạn có thể giải thích rằng bạn có thể sẽ nhận được câu trả lời để giải quyết vấn đề của bạn theo cách góc cạnh. – ganaraj

Trả lời

2

Để mở rộng nhận xét của tôi, tôi đã cập nhật fiddle của bạn để hiển thị một ý nghĩa đơn giản của một chỉ thị cảnh báo lớp của phần tử.

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

gốc bình luận:

Về thao tác dom trong bộ điều khiển, nó says here rằng bạn không nên làm điều đó cả. Nó nên đi theo một chỉ thị. Bộ điều khiển chỉ nên chứa logic nghiệp vụ.

Tại sao nó không hoạt động, tôi không biết, nhưng có lẽ vì góc cạnh vẫn đang chạy công cụ riêng của mình vào thời điểm này.

+0

Cảm ơn câu trả lời đơn giản. :) – Raftalks

1

Có hai cách để làm điều này:

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 MutationObserverhơi phức tạp hơn
Làm điều này trong một chỉ thị , trên phần tử có cha mẹ nhận con mới en (<ul> trong trường hợp này)

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); 
 
Demo    http://plnkr.co/h6kTtq 
Documentation  https://developer.mozilla.org/en/docs/Web/API/MutationObserver 
Browser support http://caniuse.com/mutationobserver 
Các vấn đề liên quan