JavaScript có gây khó chịu cần thiết để hỗ trợ một tính năng của AngularJS không?


9

Tôi sẽ bắt đầu bằng cách nói rằng tôi chỉ tìm hiểu về AngularJS và tôi đã đọc bài viết này, có vẻ như ủng hộ JavaScript gây khó chịu là điều đúng đắn:

http://www.ng-newsletter.com/posts/angular-for-the-jquery-developer.html

Sự hiểu biết của tôi là JavaScript không phô trương thường được coi là "điều đúng đắn" (có thể gây tranh cãi, nhưng nằm ngoài phạm vi câu hỏi của tôi). Nhưng tôi đã tự hỏi nếu có một tính năng đặc biệt của AngularJS yêu cầu các ràng buộc sự kiện được chỉ định thông qua các thuộc tính như thế ng-clicknào? Có cách nào để sử dụng AngularJS và KHÔNG sử dụng các ràng buộc sự kiện nội tuyến không?

Để tham khảo: JavaScript khó hiểu thường đề cập đến việc có các mối quan hệ JavaScript của bạn trong chính HTML. JavaScript không phô trương đề cập đến việc sử dụng JavaScript hoặc các phương tiện khác để áp dụng các hành vi mã theo chương trình cho DOM thay vì đánh dấu văn bản đơn giản có tham chiếu đến JavaScript.


Tôi đã đặt lại câu hỏi để ít ý kiến ​​hơn.
Kevin

4
thực tế điều này đã được trả lời: stackoverflow.com/questions/20906804/ trộm
Kevin

Câu trả lời:


6

Đúng.

Đó là cách làm việc góc cạnh.

Vào thời xa xưa (ngay sau khi tất cả các con khủng long đã chết và một chút trước khi những chiếc smartwatch trở thành The Next Big Thing), JavaScript không phô trương được coi là Điều đúng đắn. JavaScript không phô trương sẽ đi chơi với anh em họ của cô ấy, Tăng cường tiến bộ và hai người họ được coi là ánh sáng cho thế giới và ngọn hải đăng của lòng tốt.

Có một lý do cho điều đó. Rất nhiều người dùng đã sử dụng các trình duyệt có công cụ JavaScript kém hoặc có lẽ không có công cụ JavaScript. Hoặc họ đã tắt JavaScript. Chúng tôi đã nói rằng web chủ yếu để chuyển siêu văn bản và chúng tôi không nên làm cho một số trang web của chúng tôi không thể sử dụng được bằng cách buộc JavaScript sử dụng chúng.

Với cùng một mã thông báo, việc loại bỏ JavaScript khỏi HTML là điều hợp lý. HTML nên được giữ nguyên, nó đã được nghĩ, bởi vì JavaScript là thứ bạn đã thêm vào sau đó - nếu người dùng cho phép nó. Nếu không, ít nhất là đánh dấu HTML đã phản ánh ngữ nghĩa của những gì bạn đang cố gắng truyền đạt.

Đó không phải là triết lý của AngularJS hay hầu hết các hướng dẫn phát triển web hiện đại bởi vì mọi thứ đã thay đổi. Khi chúng tôi sử dụng AngularJS hoặc các khung tương tự, chúng tôi sẽ sử dụng web để phân phối các ứng dụng , không chỉ văn bản và hình ảnh. Các ứng dụng web là vô dụng nếu không có JavaScript và không có lý do gì để giả vờ khác. Vì vậy, chúng tôi đã loại bỏ xiềng xích của Tăng cường tiến bộ bởi vì (a) chúng tôi có thể tin tưởng một cách an toàn vào tất cả người dùng đã bật JavaScript và (b) nó làm chúng tôi chậm lại.

Một khi chúng ta không thực hiện Tăng cường tiến bộ, tại sao JavaScript không phô trương? Tách biệt mối quan tâm là một khái niệm tuyệt vời. Nhưng đó là sáu trong số một hoặc một nửa tá thứ khác: bạn có HTML được câu đố với các tham chiếu đến JavaScript hoặc bạn có JavaScript đánh đố với các tham chiếu đến HTML (theo cách của jQuery).

Nếu bạn sử dụng AngularJS, bạn sẽ sớm thấy sự phân tách rõ ràng hơn các mối quan tâm trong mã của mình so với các kiểu phát triển web khác. Chắc chắn, có các tham chiếu đến các hàm JS trong HTML của bạn. Nhưng bạn có thể dễ dàng di chuyển xung quanh HTML mà không phải lo lắng về việc phá mã và JS của bạn sạch sẽ, có thể kiểm tra và không phụ thuộc vào một DOM rất cụ thể. Điều này cho phép bạn sử dụng lại logic kinh doanh tốt hơn và sử dụng lại HTML tốt hơn.

Điểm mấu chốt: đừng căng thẳng về nó. Bạn sẽ quen với nó đủ nhanh. Và đừng chống lại mọi thứ chỉ vì bạn luôn được nói rằng cách khác là Con đường đúng.

Phụ Lục Nếu bạn cảm thấy điều quan trọng là cho HTML của bạn để phù hợp với tiêu chuẩn, bạn có thể sử dụng data-tiền tố trên chỉ thị góc của bạn: ví dụ, data-ng-click=data-ng-repeat=và HTML của bạn sẽ được W3C tuân thủ. Cá nhân tôi không bao giờ lo lắng về nó, nhưng làm nó là vô hại.


3
Giải thích tốt, nhưng tôi cảnh giác với tuyên bố của bạn "không thực hiện Tăng cường tiến bộ." Tăng cường tiến bộ là cách nhiều hơn là quay trở lại noJS. Nó cung cấp hình ảnh võng mạc và SVG với dự phòng cho những người không có thiết bị võng mạc. Đó là thêm hình ảnh động tinh tế cho các trình duyệt hỗ trợ chúng. Đó là giảm chất lượng video phát trực tuyến trên các thiết bị băng thông thấp (như youtube). Đó là thiết kế đáp ứng. Bạn có thể không cần dự phòng noJS cho ứng dụng web của mình, nhưng đừng từ bỏ cải tiến lũy tiến.
bryanbraun

1
@bryanbraun bạn đúng rồi. Điểm lấy.
Aaron Greenwald

Làm thế nào để bạn làm Angular không phô trương? Chúng tôi đã sẵn sàng tung ra Angular và tìm thấy một lỗ hổng thiết kế nghiêm trọng. Chúng tôi có một nhóm thiết kế HTML 50 người và một nhóm phát triển hai người. Nhà thiết kế thay đổi HTML mà không cần thêm html. Hai nhà phát triển không thể theo kịp 50 nhà thiết kế nếu chúng tôi phải điều chỉnh mọi mẫu được tạo mỗi ngày ngay cả sau khi trang web được đăng. Cũng có vẻ ngớ ngẩn khi biên dịch toàn bộ các mẫu html thành mã JavaScript như Webpack khi bạn có thể tự động hóa chức năng đó trên máy chủ để thu thập, nén và lưu trữ html theo phạm vi trang trong một tệp zip với cùng hiệu quả tải xuống của máy khách.
Zachary Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.