Làm cách nào để chạy phương thức $scope.myWork()
sau khi hiển thị mẫu? Tôi muốn thiết lập các $scope.value
và sau đó tôi cần phải thay đổi một cái gì đó với JQuery (ví dụ như trong DOM của nội dung mẫu). $scope.$watch('value', function(){....})
đang hoạt động "trước khi" hiển thị (DOM của mẫu chưa có sẵn). Cảm ơn.AngularJS: gọi lại sau khi kết xuất (làm việc với DOM sau khi kết xuất)
Trả lời
tôi sử dụng terminal
và transclude
trong một chỉ thị thuộc tính để gọi một phương thức scoped sau một mô hình được cập nhật và xem là ra (trong trường hợp của tôi để thay đổi kích thước một iframe sau một $ Resource.query):
.directive('postRender', [ '$timeout', function($timeout) {
var def = {
restrict : 'A',
terminal : true,
transclude : true,
link : function(scope, element, attrs) {
$timeout(scope.resize, 0); //Calling a scoped method
}
};
return def;
}])
Thời gian chờ $ là ma thuật đen. Nó nên có thể khai báo phương thức JS làm giá trị thuộc tính và phân tích cú pháp nó.
Vì vậy, tôi sử dụng nó trong một ng-repeat
(trong trường hợp của tôi một cây được trả lại một cách đệ quy):
<div post-render ng-repeat="r in regions | orderBy:'name'" ng-include="'tree_region_renderer.html'">
Jens câu trả lời ở trên sẽ làm việc, nhưng lưu ý rằng trên AngularJS phiên bản mới hơn (ví dụ 1.2.3) bạn không thể có chỉ thị postRender đó kết hợp với ng-repeat như các thuộc tính trên cùng một thẻ vì cả hai đều có transclude: true. Trong trường hợp đó, bạn phải loại bỏ transclude hoặc có một thẻ riêng biệt với thuộc tính chỉ thị postRender.
Cũng cần lưu ý ưu tiên của các thuộc tính khi sử dụng thiết bị đầu cuối: true vì bạn có thể có thuộc tính không hiệu quả do thuộc tính được ưu tiên cao hơn trên cùng một thẻ.
Tôi cũng gặp phải vấn đề này, các giải pháp khác không hiệu quả đối với tôi, và dường như loại thước đo Thước đo phải được giải quyết. Một đánh giá nhanh chóng của Protractor's client-side scripts cho thấy nó sử dụng angular.getTestability(element)
để biết khi nào thực sự chạy thử nghiệm. Phương thức chờ cho đến khi không có thời gian chờ hoặc yêu cầu http đang chờ xử lý và sau đó chạy cuộc gọi lại của bạn. Đây là chỉ thị của tôi:
export function afterRender ($timeout) {
"ngInject";
return {
restrict: 'A',
terminal: true,
link: function (scope, element, attrs) {
angular.getTestability(element).whenStable(function() {
console.log('[rendered]');
});
}
};
}
Vì bạn đang chạy bên trong ứng dụng Góc, bạn có thể chỉ cần tiêm '$ browser' và đăng ký gọi lại với phương thức' notifyWhenNoOutstandingRequests() '. Tuy nhiên, lưu ý rằng điều này phụ thuộc vào một số API riêng tư, không có giấy tờ và có thể bị gián đoạn mà không cần thông báo. – gkalpak
Tôi tìm thấy trang này khi tìm cách tạo hồ sơ hiển thị DOM. Tôi tìm thấy một giải pháp đơn giản, rất hiệu quả trong trường hợp sử dụng của tôi.
Đính kèm trình xử lý ng-init vào phần tử DOM và trong hàm điều khiển, sử dụng $ timeout để thực hiện thực thi. Ví dụ:
HTML:
<div ng-init="foo()">
JS:
$scope.foo = function() {
$timeout(function() {
// This code runs after the DOM renders
});
});
- 1. Cách tái kết xuất thành phần RichFaces sau khi liên kết a4j được gọi
- 2. Gọi lại sau khi kết thúc vòng lặp trong node.js
- 3. sau khi xuất khẩu mysql
- 4. THREE.js: phương thức gọi điện sau khi kết xuất không hoạt động
- 5. Có thể xem kết quả xuất ra sau khi bị xóa và đăng xuất không?
- 6. Nút quay lại CodeIgniter sau khi đăng xuất
- 7. Kết hợp với MVC4 không hoạt động sau khi tôi xuất bản lên azure
- 8. Mũi tên quay lại sau khi đăng xuất
- 9. Truy xuất _id sau khi chèn vào lệnh gọi Meteor.method
- 10. Chèn jQuery sau khi gọi lại?
- 11. Nút quay lại trình duyệt sau khi đăng xuất
- 12. Tệp đã nén với kết quả PHP trong tệp cpgz sau khi trích xuất
- 13. Việc cần làm với mã thông báo oauth twitter sau khi được truy xuất?
- 14. Tìm phần tử xuất hiện sau khi
- 15. gitignore sau khi cam kết
- 16. Gọi hành động sau khi viewpager kết thúc
- 17. Làm mới iAd sau khi ngắt kết nối mạng
- 18. Truy cập đối tượng DOM sau khi gọi AJAX?
- 19. Bộ lọc để thực thi trước khi kết xuất nhưng sau bộ điều khiển?
- 20. AutoExposureLock đặt lại sau khi gọi takePicture()
- 21. Đọc tệp MIDI (C): 0x00 xuất hiện sau khi kết thúc giá trị độ dài var
- 22. Hadoop ném java.lang.VerifyError sau khi xuất tệp jar
- 23. Truyền lại TCP tiếp tục ngay cả sau khi cờ RST đặt lại xuất hiện
- 24. làm thế nào để xuất tập tin vào trình duyệt sau khi jquery ajax gọi
- 25. Cách tự động kết nối lại hồ bơi kết nối Oracle sau khi ngắt kết nối?
- 26. MembershipUser.IsOnline là đúng ngay cả sau khi đăng xuất
- 27. Truy xuất đích ban đầu từ iptables sau khi REDIRECT
- 28. iphone: Khởi động lại hoạt ảnh lặp sau khi chế độ xem bị ẩn, sau đó xuất hiện lại?
- 29. Đặt lại biểu mẫu sau khi gửi trong AngularJS
- 30. gọi lại jquery sau khi tất cả ảnh trong dom được tải?
Có ví dụ của tôi, điều đó không làm việc - http://jsfiddle.net/C6SUv/7/ (tại sao isn' t $ scope.afterRender gọi sau mỗi lần render?). – user1595465
vì hàm liên kết được gọi một lần sau khi phần tử được hiển thị, không phải sau mỗi kết xuất của góc. Tại sao bạn không thể tạo ra chỉ thị làm cho những thay đổi mà bạn cần với jQuery và cập nhật góc? Thao tác với DOM bên trong các bộ điều khiển không phải là cách thực hành tốt –
Hmmmmm. Tôi phải di chuyển div với chiều cao cố định. Tôi có các nút để di chuyển con trỏ trong danh sách các trường. Tôi đặt $ scope.value trong ngClick và sau đó tôi cần phải di chuyển trên vị trí bên phải (thông qua scrollTop). Đó là lý do, tại sao tôi muốn thao tác với DOM bên trong bộ điều khiển. Bất kỳ ý tưởng? – user1595465