Khi viết một chỉ thị trong AngularJS, làm thế nào để tôi quyết định xem tôi không cần phạm vi mới, phạm vi con mới hay phạm vi tách biệt mới?


265

Tôi đang tìm kiếm một số hướng dẫn mà người ta có thể sử dụng để giúp xác định loại phạm vi sẽ sử dụng khi viết một chỉ thị mới. Lý tưởng nhất là tôi muốn một cái gì đó tương tự như một sơ đồ dẫn tôi đi qua một loạt các câu hỏi và đưa ra câu trả lời chính xác - không có phạm vi mới, phạm vi con mới hoặc phạm vi cô lập mới - nhưng điều đó có thể đòi hỏi quá nhiều. Đây là bộ hướng dẫn hiện tại của tôi:

Tôi biết rằng việc sử dụng một lệnh có phạm vi cách ly trên một phần tử buộc tất cả các chỉ thị khác trên cùng một phần tử đó phải sử dụng cùng một (một) phạm vi cách ly, vì vậy không giới hạn nghiêm trọng này khi phạm vi cách ly có thể được sử dụng?

Tôi hy vọng rằng một số người trong nhóm Angular-UI (hoặc những người khác đã viết nhiều chỉ thị) có thể chia sẻ kinh nghiệm của họ.

Vui lòng không thêm câu trả lời đơn giản là "sử dụng phạm vi tách biệt cho các thành phần có thể sử dụng lại".


bởi "phạm vi con" bạn có nghĩa là tạo phạm vi trong chức năng liên kết bằng "phạm vi. $ new ()"? Bởi vì tôi biết, chỉ thị có thể có phạm vi tách biệt hoặc không có nó (vì vậy sẽ sử dụng phạm vi được sử dụng)
Valentyn Shybanov

3
@ValentynShybanov Cài đặt scope: truesẽ $scope.new()tự động tạo phạm vi con bằng cách sử dụng .
Josh David Miller

2
@Valentyn, những gì Josh nói: vì vậy, ba khả năng là scope: false(mặc định, không có phạm vi mới), scope: true(phạm vi mới kế thừa nguyên mẫu) và scope: { ... }(phạm vi cách ly mới).
Mark Rajcok

1
Vâng, thnx. Tôi đã bỏ lỡ sự khác biệt giữa "đúng" và "{}". Tốt để biết.
Valentyn Shybanov

Có một trường hợp thứ 4 mà mọi người thường có xu hướng bỏ qua .. đó là "bộ điều khiển chỉ thị" .. Tôi nghĩ rằng câu hỏi nên được mở rộng để bao gồm cả họ ... +1 cho câu hỏi ..
ganaraj

Câu trả lời:


291

Thật là một câu hỏi tuyệt vời! Tôi muốn yêu để nghe những gì người khác nói gì, nhưng đây là những hướng dẫn tôi sử dụng.

Tiền đề cao độ: phạm vi được sử dụng làm "chất keo" mà chúng ta sử dụng để liên lạc giữa bộ điều khiển chính, lệnh và mẫu chỉ thị.

Phạm vi phụ huynh: scope: false vì vậy không có phạm vi mới nào cả

Tôi không sử dụng điều này rất thường xuyên, nhưng như @MarkRajcok đã nói, nếu lệnh không truy cập bất kỳ biến phạm vi nào (và rõ ràng là không đặt bất kỳ biến nào!) Thì điều này cũng ổn đối với tôi. Đây là cũng hữu ích cho chỉ con được chỉ được sử dụng trong bối cảnh các thị mẹ (mặc dù luôn có những trường hợp ngoại lệ này) và không có một bản mẫu. Về cơ bản, mọi thứ với mẫu không thuộc về việc chia sẻ một phạm vi, vì bạn vốn đã phơi bày phạm vi đó để truy cập và thao tác (nhưng tôi chắc chắn có những ngoại lệ đối với quy tắc này).

Lấy ví dụ, gần đây tôi đã tạo ra một lệnh vẽ đồ họa vector (tĩnh) bằng thư viện SVG tôi đang trong quá trình viết. Nó $observelà hai thuộc tính ( widthheight) và sử dụng các thuộc tính trong tính toán của nó, nhưng nó không đặt và cũng không đọc bất kỳ biến phạm vi nào và không có mẫu. Đây là một trường hợp sử dụng tốt để không tạo ra một phạm vi khác; chúng ta không cần một cái, vậy tại sao phải bận tâm?

Nhưng trong một chỉ thị SVG khác, tuy nhiên, tôi yêu cầu một bộ dữ liệu để sử dụng và ngoài ra phải lưu trữ một chút trạng thái. Trong trường hợp này, sử dụng phạm vi cha mẹ sẽ là vô trách nhiệm (nói chung, nói chung). Vì vậy, thay vào đó ...

Phạm vi trẻ em: scope: true

Các chỉ thị có phạm vi con được nhận biết theo ngữ cảnh và được dự định tương tác với phạm vi hiện tại.

Rõ ràng, một lợi thế chính của điều này so với phạm vi cô lập là người dùng có thể tự do sử dụng phép nội suy trên bất kỳ thuộc tính nào họ muốn; ví dụ: sử dụng class="item-type-{{item.type}}"trên một lệnh có phạm vi cách ly sẽ không hoạt động theo mặc định, nhưng hoạt động tốt trên một lệnh có phạm vi con bởi vì bất cứ thứ gì được nội suy vẫn có thể được tìm thấy theo mặc định trong phạm vi cha. Ngoài ra, bản thân lệnh có thể đánh giá các thuộc tính và biểu thức một cách an toàn trong bối cảnh phạm vi của chính nó mà không phải lo lắng về ô nhiễm hoặc thiệt hại cho cha mẹ.

Ví dụ, một tooltip là một cái gì đó vừa được thêm vào; một phạm vi cô lập sẽ không hoạt động (theo mặc định, xem bên dưới) bởi vì chúng tôi dự kiến ​​sẽ sử dụng các chỉ thị hoặc thuộc tính nội suy khác ở đây. Chú giải công cụ chỉ là một sự nâng cao. Nhưng tooltip cũng cần đặt một số thứ trên phạm vi để sử dụng với một chỉ thị phụ và / hoặc khuôn mẫu và rõ ràng là để quản lý trạng thái của chính nó, vì vậy sẽ thực sự rất tệ khi sử dụng phạm vi cha. Chúng tôi hoặc đang làm ô nhiễm nó hoặc làm hỏng nó, và cũng không phải là bueno.

Tôi thấy mình sử dụng phạm vi con thường xuyên hơn so với phạm vi cách ly hoặc cha mẹ.

Phạm vi cô lập: scope: {}

Đây là cho các thành phần tái sử dụng. :-)

Nhưng nghiêm túc, tôi nghĩ "các thành phần có thể tái sử dụng" là "các thành phần độc lập". Mục đích là chúng sẽ được sử dụng cho một mục đích cụ thể, do đó, việc kết hợp chúng với các chỉ thị khác hoặc thêm các thuộc tính được nội suy khác vào nút DOM vốn không có ý nghĩa.

Để cụ thể hơn, mọi thứ cần thiết cho chức năng độc lập này được cung cấp thông qua các thuộc tính được chỉ định được đánh giá trong ngữ cảnh của phạm vi cha; chúng là các chuỗi một chiều ('@'), biểu thức một chiều ('&') hoặc các ràng buộc biến hai chiều ('=').

Trên các thành phần độc lập, không cần thiết phải áp dụng các chỉ thị hoặc thuộc tính khác trên nó bởi vì nó tồn tại bởi chính nó. Phong cách của nó được điều chỉnh bởi mẫu riêng của nó (nếu cần thiết) và có thể có nội dung phù hợp được bao gồm (nếu cần). Nó là độc lập, vì vậy chúng tôi cũng đặt nó trong một phạm vi tách biệt để nói: "Đừng gây rối với điều này. Tôi sẽ cung cấp cho bạn một API được xác định thông qua một vài thuộc tính này."

Một thực hành tốt nhất là loại trừ càng nhiều thứ dựa trên mẫu khỏi các hàm điều khiển và liên kết chỉ thị càng tốt. Điều này cung cấp một điểm cấu hình "giống như API" khác: người dùng lệnh có thể chỉ cần thay thế mẫu! Tất cả các chức năng đều giữ nguyên và API nội bộ của nó không bao giờ được chạm vào, nhưng chúng ta có thể gây rối với việc thực hiện kiểu dáng và DOM nhiều như chúng ta cần. ui / bootstrap là một ví dụ tuyệt vời về cách làm tốt điều này bởi vì Peter & Pawel thật tuyệt vời.

Phạm vi cô lập cũng là tuyệt vời để sử dụng với loại trừ. Lấy các tab; chúng không chỉ là toàn bộ chức năng, mà bất cứ thứ gì bên trong nó đều có thể được đánh giá tự do từ trong phạm vi cha mẹ trong khi để các tab (và panes) làm bất cứ điều gì chúng muốn. Các tab rõ ràng có trạng thái riêng , thuộc về phạm vi (để tương tác với mẫu), nhưng trạng thái đó không liên quan gì đến bối cảnh mà nó được sử dụng - nó hoàn toàn bên trong những gì tạo ra một lệnh chỉ thị tab. Hơn nữa, sẽ không có ý nghĩa gì khi sử dụng bất kỳ chỉ thị nào khác với các tab. Chúng là các tab - và chúng tôi đã có chức năng đó!

Bao quanh nó với nhiều chức năng hơn hoặc bao gồm nhiều chức năng hơn, nhưng chỉ thị là những gì nó đã có.

Tất cả những gì đã nói, tôi nên lưu ý rằng có nhiều cách xung quanh một số hạn chế (nghĩa là các tính năng) của một phạm vi cô lập, như @ProLoser gợi ý trong câu trả lời của anh ấy. Ví dụ, trong phần phạm vi con, tôi đã đề cập đến phép nội suy trên các thuộc tính không trực tiếp phá vỡ khi sử dụng phạm vi cách ly (theo mặc định). Nhưng người dùng có thể, ví dụ, chỉ cần sử dụng class="item-type-{{$parent.item.type}}"và nó sẽ hoạt động trở lại. Vì vậy, nếu có một lý do thuyết phục để sử dụng phạm vi cô lập trên phạm vi con nhưng bạn lo lắng về một số hạn chế này, hãy biết rằng bạn có thể giải quyết hầu như tất cả chúng nếu bạn cần.

Tóm lược

Các chỉ thị không có phạm vi mới là chỉ đọc; họ hoàn toàn đáng tin cậy (tức là nội bộ cho ứng dụng) và họ không chạm vào jack. Các chỉ thị với phạm vi con thêm chức năng, nhưng chúng không phải chức năng duy nhất . Cuối cùng, phạm vi cô lập là dành cho các chỉ thị là toàn bộ mục tiêu; chúng là độc lập, vì vậy không sao (và hầu hết "chính xác") để cho chúng đi lừa đảo.

Tôi muốn đưa ra những suy nghĩ ban đầu của mình, nhưng khi tôi nghĩ ra nhiều thứ hơn, tôi sẽ cập nhật điều này. Nhưng tào lao thần thánh - đây là một câu trả lời SO ...


PS: Hoàn toàn tiếp tuyến, nhưng vì chúng ta đang nói về phạm vi, tôi thích nói "nguyên mẫu" trong khi những người khác thích "nguyên mẫu", điều này có vẻ chính xác hơn nhưng chỉ không nói gì cả. :-)


Cảm ơn Josh, câu trả lời tuyệt vời. Tôi muốn / mong đợi câu trả lời dài cho việc này. Hai điều tôi không tuân theo: 1) phạm vi con: "người dùng có thể tự do sử dụng phép nội suy trên bất kỳ thuộc tính nào họ muốn". 2) cô lập phạm vi: "hoặc không phải tất cả, trong trường hợp '?'" Bạn có thể giải thích một chút về những điều đó không? (Hãy thoải mái chỉnh sửa bài đăng của bạn thay vì viết bình luận nếu điều đó dễ dàng hơn.)
Mark Rajcok

@MarkRajcok Đối với (1), tôi đã thay đổi nó để làm cho nó bớt khó chịu hơn một chút - hãy cho tôi biết nếu tôi không thành công. Đối với (2), đó là sự kết hợp của một lỗi đánh máy và từ ngữ kém; Tôi viết lại đoạn đó để rõ ràng hơn. Tôi cũng đã thêm một hoặc hai ví dụ, làm rõ thêm một vài điều và sửa một số lỗi chính tả.
Josh David Miller

Như đã đề cập trong câu trả lời - bootstrap cho angular là một ví dụ tuyệt vời về việc kết hợp những thứ này. Tôi thấy ví dụ accordion đặc biệt hữu ích - GitHub - Accordion
CalM

Bạn đã đề cập rằng bạn sử dụng phạm vi trẻ em nhiều nhất, tôi nghĩ rằng mô hình chỉ thị có thể sử dụng lại là phổ biến nhất và tôi đã tránh viết các chỉ thị chỉ được sử dụng một lần. Đây có phải là không cần thiết? Đôi khi khi HTML của tôi quá lớn, tôi cảm thấy muốn chuyển phần đó thành một lệnh nhưng nó sẽ chỉ được sử dụng một lần nên tôi chỉ để nó trong html.
dùng2483724

2
@ user2483724 Một quan niệm sai lầm rất phổ biến là các chỉ thị "có thể tái sử dụng" là những chỉ thị sử dụng phạm vi cách ly; không phải vậy Nếu bạn xem các chỉ thị được đóng gói sẵn, gần như không ai trong số họ sử dụng phạm vi cách ly - một số thậm chí không phải là phạm vi con - nhưng tôi đảm bảo rằng bạn có thể tái sử dụng! Quy tắc nên là trong cách sử dụng phạm vi trong chỉ thị. Nếu đó chỉ là về việc tiết kiệm dung lượng trong một tệp, tôi không chắc chỉ thị là cách tiếp cận tốt nhất. Nó làm tăng thời gian xử lý vì lợi ích của nhà phát triển. Nhưng nếu bạn phải, sau đó đi cho nó. Hoặc sử dụng một ngInclude. Hoặc làm điều đó như là một phần của bản dựng của bạn. Nhiều lựa chọn!
Josh David Miller

52

Chính sách và kinh nghiệm cá nhân của tôi:

Bị cô lập: một hộp cát riêng

Tôi muốn tạo ra nhiều phương thức phạm vi và các biến CHỈ được sử dụng bởi chỉ thị của tôi và người dùng không bao giờ nhìn thấy hoặc truy cập trực tiếp. Tôi muốn đưa vào danh sách trắng những dữ liệu phạm vi có sẵn cho tôi. Tôi có thể sử dụng loại trừ để cho phép người dùng quay trở lại ở phạm vi cha (không bị ảnh hưởng) . Tôi KHÔNG muốn các biến và phương thức của tôi có thể truy cập được ở trẻ em bị nhiễm bệnh.

Đứa trẻ: một phần nội dung

Tôi muốn tạo các phương thức phạm vi và các biến có thể được người dùng truy cập, nhưng không liên quan đến các phạm vi xung quanh (anh chị em và cha mẹ) bên ngoài ngữ cảnh của chỉ thị của tôi. Tôi cũng muốn để TẤT CẢ dữ liệu phạm vi cha mẹ nhỏ giọt trong suốt.

Không có: chỉ thị đơn giản, chỉ đọc

Tôi không thực sự cần phải làm rối với các phương thức phạm vi hoặc các biến. Tôi có thể đang làm một cái gì đó không phải làm với phạm vi (chẳng hạn như hiển thị các plugin jQuery đơn giản, xác thực, v.v.).

Ghi chú

  • Bạn không nên để ngModel hoặc những thứ khác ảnh hưởng trực tiếp đến quyết định của bạn. Bạn có thể tránh hành vi kỳ quặc bằng cách làm những việc như ng-model=$parent.myVal(trẻ em) hoặc ngModel: '='(cô lập).
  • Isolate + transclude sẽ khôi phục tất cả các hành vi thông thường để anh chị em chỉ thị và trở về phạm vi cha mẹ, vì vậy đừng để điều đó ảnh hưởng đến phán đoán của bạn.
  • Đừng gây rối với phạm vi trên không bởi vì nó giống như đặt dữ liệu trên phạm vi cho nửa dưới của DOM nhưng không phải là đầu nửa mà làm cho 0 có ý nghĩa.
  • Hãy chú ý đến các ưu tiên chỉ thị (không có ví dụ cụ thể về cách điều này có thể ảnh hưởng đến mọi thứ)
  • Tiêm dịch vụ hoặc sử dụng bộ điều khiển để liên lạc qua các chỉ thị với bất kỳ loại phạm vi. Bạn cũng có thể làm require: '^ngModel'để tìm trong các phần tử cha.

1
Tôi có thể đã hiểu nhầm phần này: "Isolate + transclude sẽ khôi phục tất cả các hành vi bình thường cho anh chị em chỉ thị". Xem plunker này . Bạn sẽ phải nhìn vào bảng điều khiển.
Josh David Miller

1
Cảm ơn ProLoser cho những hiểu biết / câu trả lời của bạn. Bạn là một trong những người tôi hy vọng sẽ thấy bài đăng này nếu tôi thêm thẻ angularjs-ui.
Mark Rajcok

@JoshDavidMiller khi nói về các chỉ thị trên cùng một phần tử DOM, mọi thứ trở nên phức tạp hơn và bạn nên bắt đầu xem xét thuộc tính ưu tiên thay thế. Loại trừ có liên quan nhiều hơn đến nội dung trẻ em.
ProLoser

1
@ProLoser Đúng, nhưng tôi không chắc ý của bạn về câu nói đó. Họ rõ ràng ảnh hưởng đến trẻ em, nhưng làm thế nào để phạm vi chỉ thị ảnh hưởng đến chỉ thị anh chị em của họ?
Josh David Miller

18

Sau khi viết rất nhiều chỉ thị, tôi đã quyết định sử dụng ít isolatedphạm vi hơn . Mặc dù nó rất tuyệt và bạn đóng gói dữ liệu và chắc chắn không rò rỉ dữ liệu vào phạm vi cha, nó sẽ hạn chế nghiêm trọng số lượng lệnh bạn có thể sử dụng cùng nhau. Vì thế,

Nếu chỉ thị bạn sẽ viết sẽ tự hành xử hoàn toàn và bạn sẽ không chia sẻ nó với các chỉ thị khác, hãy chuyển sang phạm vi tách biệt . (giống như một thành phần bạn chỉ có thể cắm nó vào, không có nhiều tùy chỉnh cho nhà phát triển cuối) (nó trở nên rất phức tạp khi bạn cố gắng viết các thành phần phụ có chỉ thị bên trong)

Nếu chỉ thị bạn sẽ viết sẽ chỉ thực hiện các thao tác dom không cần trạng thái bên trong của phạm vi hoặc thay đổi phạm vi rõ ràng (chủ yếu là những điều rất đơn giản); đi cho không có phạm vi mới . (ví dụ như ngShow, ngMouseHover, ngClick, ngRepeat)

Nếu chỉ thị bạn sẽ viết cần thay đổi một số thành phần trong phạm vi cha, nhưng cũng cần xử lý một số trạng thái nội bộ, hãy chuyển sang phạm vi con mới . (như ngController)

Hãy chắc chắn kiểm tra mã nguồn cho các chỉ thị: https://github.com/angular/angular.js/tree/master/src/ng/directive
Nó giúp ích rất nhiều cho cách suy nghĩ về chúng


Nếu một số thành phần cần liên lạc với nhau, chúng có thể có phạm vi và cách sử dụng riêng biệt require, vì vậy việc giữ các chỉ thị của bạn vẫn được tách rời. Vậy làm thế nào nó giới hạn khả năng? Nó thậm chí còn làm cho các chỉ thị cụ thể hơn (vì vậy hãy khai báo những gì bạn phụ thuộc vào). Vì vậy, tôi sẽ chỉ để lại một quy tắc: nếu lệnh của bạn có trạng thái hoặc cần một số dữ liệu từ phạm vi được sử dụng - sử dụng phạm vi tách biệt. Nếu không thì không sử dụng phạm vi. Và về "phạm vi trẻ em" - Tôi cũng đã viết khá nhiều chỉ thị và không bao giờ cần tính năng này. Nếu "cần thay đổi một số thành phần trong phạm vi cha mẹ" - hãy sử dụng các ràng buộc.
Valentyn Shybanov

Và cũng về "cần thay đổi một số thành phần trong phạm vi cha mẹ" - nếu bạn sửa đổi một cái gì đó trong phạm vi con, các thay đổi trong phạm vi cha mẹ (trừ khi bạn sử dụng $parenthack bẩn ). Vì vậy, thực sự "phạm vi con" cho các chỉ thị là thứ gì đó trông giống như được sử dụng ở phía sau - giống như ngRepeatnó tạo ra phạm vi con mới cho mỗi mục để lặp lại (nhưng nó cũng tạo ra nó bằng cách sử dụng scope.$new();và không scope: true.
Valentyn Shybanov 16/2/13

1
Bạn không thể yêu cầu nhiều phạm vi bị cô lập trong cùng một phần tử, bạn không thể truy cập vào các hàm trong phạm vi cha, trừ khi bạn ràng buộc chúng một cách rõ ràng. (Chúc may mắn khi sử dụng, ngClickv.v.) Yêu cầu tạo ra một loại tách rời mà tôi đồng ý, nhưng bạn vẫn cần biết về chỉ thị của phụ huynh. Trừ khi nó giống như một thành phần , tôi sẽ không bị cô lập. Các chỉ thị (ít nhất, hầu hết trong số chúng) có nghĩa là có khả năng tái sử dụng cao và sự cô lập phá vỡ điều này.
Umur Kontacı

Tôi cũng không sử dụng phạm vi con trong các chỉ thị nhưng vì phạm vi con được kế thừa nguyên mẫu từ phạm vi cha, nếu quyền truy cập vào một thuộc tính trong thuộc tính trong phạm vi cha, các thay đổi được đưa ra. Các tác giả của Angular đã nói về nó trong cuộc họp của MTV, "thật tốt khi có một dấu chấm ở đâu đó" youtube.com/watch?v=ZhfUv0spHCY
Umur Kontacı

5
Đầu tiên, tôi nghĩ bạn hơi quá khắc nghiệt trong phạm vi cô lập. Tôi nghĩ rằng họ có khả năng áp dụng rộng hơn so với việc bạn cho họ tín dụng vì họ có và có nhiều cách để tránh nhiều thách thức mà bạn (chính xác) chỉ ra khi chúng tôi sử dụng chúng. Tôi cũng không đồng ý với "không có nhiều tùy chỉnh cho nhà phát triển cuối" - xem câu trả lời của tôi để biết chi tiết. Điều đó nói rằng, câu trả lời của bạn không xấu cũng không sai và nó đã giải quyết được câu hỏi, vì vậy tôi không chắc tại sao nó lại bị bỏ phiếu. Vì vậy, +1.
Josh David Miller

9

Chỉ cần nghĩ rằng tôi sẽ thêm sự hiểu biết hiện tại của mình và cách nó liên quan đến các khái niệm JS khác.

Mặc định (ví dụ: không khai báo hoặc phạm vi: false)

Điều này là tương đương về mặt triết học với việc sử dụng các biến toàn cầu. Lệnh của bạn có thể truy cập mọi thứ trong trình điều khiển chính nhưng nó cũng ảnh hưởng đến chúng và bị ảnh hưởng cùng một lúc.

phạm vi:{}

Điều này giống như một mô-đun, bất cứ điều gì nó muốn sử dụng cần phải được thông qua rõ ràng. Nếu MỌI lệnh bạn sử dụng là một phạm vi cô lập, nó có thể tương đương với việc tạo MỌI tệp JS bạn viết mô-đun của riêng mình với rất nhiều chi phí trong việc tiêm tất cả các phụ thuộc.

phạm vi: con

Đây là nền tảng trung gian giữa các biến toàn cầu và thông qua rõ ràng. Nó tương tự như chuỗi nguyên mẫu của javascript và chỉ mở rộng cho bạn một bản sao của phạm vi cha. Nếu bạn tạo một phạm vi cô lập và vượt qua trong mọi thuộc tính và chức năng của phạm vi cha thì nó có chức năng tương đương với điều này.


Điều quan trọng là BẤT K direct lệnh nào có thể được viết BẤT K way cách nào. Các khai báo phạm vi khác nhau chỉ ở đó để giúp bạn tổ chức. Bạn có thể biến mọi thứ thành một mô-đun hoặc bạn chỉ có thể sử dụng tất cả các biến toàn cục và rất cẩn thận. Để dễ bảo trì mặc dù tốt hơn là nên mô đun hóa logic của bạn thành các phần mạch lạc logic. Có sự cân bằng giữa một đồng cỏ mở và nhà tù kín. Lý do điều này là khó khăn tôi tin là khi mọi người tìm hiểu về điều này, họ nghĩ rằng họ đang tìm hiểu về cách thức hoạt động của các chỉ thị nhưng thực sự họ đang học về tổ chức mã / logic.

Một điều khác đã giúp tôi tìm ra cách làm việc của các chỉ thị là tìm hiểu về ngInclude. ngInclude giúp bạn bao gồm các phần html. Khi tôi lần đầu tiên bắt đầu sử dụng các lệnh tôi thấy rằng bạn có thể sử dụng tùy chọn mẫu của nó để giảm mã của bạn nhưng tôi không thực sự đính kèm bất kỳ logic nào.

Tất nhiên, giữa các chỉ thị của góc và công việc của nhóm góc cạnh tôi chưa phải tạo ra chỉ thị của riêng mình mà không có gì đáng kể nên quan điểm của tôi về điều này có thể hoàn toàn sai.


2

Tôi đồng tình với Umur. Về lý thuyết, phạm vi biệt lập nghe có vẻ tuyệt vời và "di động", nhưng khi xây dựng ứng dụng của tôi liên quan đến chức năng không tầm thường, tôi đã gặp phải cần phải kết hợp một số chỉ thị (một số lồng vào nhau hoặc thêm thuộc tính cho chúng) để viết hoàn toàn vào tôi HTML riêng, là mục đích của Ngôn ngữ cụ thể miền.

Cuối cùng, thật kỳ lạ khi phải chuyển mọi giá trị chung hoặc chung xuống chuỗi với nhiều thuộc tính trên mỗi lệnh gọi DOM của một lệnh (theo yêu cầu với phạm vi cách ly). Nó chỉ trông thật ngu ngốc khi liên tục viết tất cả những gì trong DOM và nó cảm thấy không hiệu quả, ngay cả khi đây là những đối tượng được chia sẻ. Nó cũng không cần thiết làm phức tạp các tuyên bố chỉ thị. Cách giải quyết của việc sử dụng $ cha mẹ để "tiếp cận" và lấy các giá trị từ HTML chỉ thị có vẻ như Biểu mẫu rất xấu.

Tôi cũng vậy, tôi đã thay đổi ứng dụng của mình để có hầu hết các chỉ thị phạm vi con với rất ít sự cô lập - chỉ những người không cần truy cập BẤT CỨ từ cha mẹ nào ngoài những gì chúng có thể được chuyển qua các thuộc tính đơn giản, không lặp lại.

Đã mơ giấc mơ về Ngôn ngữ cụ thể của miền trong nhiều thập kỷ trước khi có một điều như vậy, tôi rất phấn khởi khi AngularJS cung cấp tùy chọn này và tôi biết rằng, khi nhiều nhà phát triển hoạt động trong lĩnh vực này, chúng ta sẽ thấy một số ứng dụng rất tuyệt cũng dễ dàng cho các kiến ​​trúc sư của họ viết, mở rộng và gỡ lỗi.

- Đ

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.