Sử dụng phạm vi của bộ điều khiển AngularJS trong Typescript
Tình huống: Gần đây tôi bắt đầu sử dụng Typescript và hiện đang tích hợp nó vào ứng dụng web AngularJS của mình. Tôi đã sử dụng cú pháp 'controller as' thay vì $scope khi có thể.
Vấn đề: Tôi dường như không thể tìm ra cách thích hợp để thay thế var self=this; Tôi đã bắt đầu thay thế vm bằng this ở khắp mọi nơi, điều này sớm đưa tôi đến ngõ cụt khi ở bên trong các hàm forEach, sự kiện click, v.v.
Giải pháp tạm thời của tôi: ép kiểu var self=this; trong mỗi hàm, vì theo hiểu biết của tôi thì không thể ép kiểu nó toàn cục. Nó cũng không hoạt động trong tất cả các trường hợp.
Câu hỏi của tôi: tôi có bỏ lỡ điều gì rõ ràng không? Có cách nào tốt hơn để truy cập phạm vi của controller không?
Câu trả lời #1
Các hàm mũi tên béo cứu nguy!!!
Thực sự không cần thiết phải sử dụng var self=this trong TypeScript...
Hàm mũi tên béo giữ nguyên phạm vi (từ vựng) (ý nghĩa của this) bên trong các hàm callback:
var self = this;
fooService.doSomething()
.then(result => {
console.assert(this === self); // this is valid and true
});
Cho ví dụ cụ thể của bạn:
items.forEach((item) => {
this.somethingElse = item; // (no need for self)
});
Lưu ý Đây không thực sự là một tính năng của TypeScript, mà là chức năng của ES6/ES2015
Giải thích thêm
