hướng dẫn phong cách angular2 - tài sản có ký hiệu đô la?


185

Nhìn vào ví dụ mã angular2 , chúng ta thấy một số thuộc tính công khai có dấu $:

  <....>
  private missionAnnouncedSource = new Subject<string>();
  private missionConfirmedSource = new Subject<string>();
  // Observable string streams
  missionAnnounced$ = this.missionAnnouncedSource.asObservable();
  missionConfirmed$ = this.missionConfirmedSource.asObservable();
  <....>

Ai có thể giải thích:

  • tại sao $ được sử dụng (lý do đằng sau ký hiệu này là gì? luôn sử dụng giá trị này cho các thuộc tính công cộng)?
  • thuộc tính công cộng được sử dụng nhưng không phải là phương thức (ví dụ: MissionAnnouncements (), MissionConf Confirmations ()) - một lần nữa, đây có phải là quy ước cho các ứng dụng ng2 không?

Dường như không có bất cứ điều gì liên quan đến điều này trong hướng dẫn phong cách chính thức ?

Câu trả lời:


265

$ hậu tố (được phổ biến bởi Cycle.js ) được sử dụng để chỉ ra rằng biến đó là một biến có thể quan sát được . Nó cũng có thể làm cho hướng dẫn phong cách chính thức nhưng nó chưa có

Đọc thêm ở đây: Dấu đô la $có nghĩa là gì?

Cập nhật: Đọc thêm về dấu hiệu $ $ trailing trên trang web Angular tại đây: https://angular.io/guide/rx-l Library # tên-conventions-for-observables


4
Nó sẽ không làm cho nó để hướng dẫn phong cách chính thức. Tôi sẽ đặt 100 đô la vào đó.
Eric Bishard

15
Tài liệu tham khảo trong các tài liệu góc: angular.io/guide/rx-library#naming-conventions-for-observables
michelepatrassi

66
@EricBishard Ý bạn là 100 $
TabNotSpaces

1
Còn những lời hứa thì sao?
galki

7
bảo mật công việc - làm cho mã khó hiểu hơn cho giáo dân.
java-nghiện602

14

Mô hình đặt tên $ bắt nguồn từ Andre Saltz và gợi ý số nhiều tất cả các tên biến có thể quan sát hoặc luồng.

getAll(): Observable<Zone[]>{
    let zone$ = this.http
      .get(`${this.baseUrl}/zones`, {headers: this.getHeaders()})
      .map(mapZone);
      return zone$;
  }

Một cách tiếp cận khác là số nhiều tên biến có thể quan sát hoặc luồng với ký tự unicode khớp với chữ cái cuối của từ. Điều này giải quyết vấn đề với những từ không được chia số nhiều với "s".

mouse$ vs mic€

Cả hai quy ước đặt tên này đều nằm trong hướng dẫn kiểu Angular chính thức. Việc sử dụng cái này hay cái kia (hoặc không) hoàn toàn phụ thuộc vào sở thích cá nhân.


10
cactu $ vs cactï
BYTE RIDER

Tham khảo tốt đẹp! Ngoài ra kiểm tra bài viết này. Điều làm tôi khó chịu là tìm một nỗ lực để làm điều này trong cơ sở mã của tôi (các đồng nghiệp khác) và nhận sai, đặt hậu tố vào biến sai hoặc thậm chí tệ hơn là bắt đầu biến với nó. Tôi đã thấy mọi người sử dụng điều này mà không có sự nhất quán cũng có, trong trường hợp đó nó hoàn toàn không có ý nghĩa. Medium.com/@ben Meat / từ
Eric Bishard 24/03/18

Nếu bạn muốn sử dụng nó, tôi sẽ khuyên bạn nên tuân theo các quy ước đặt tên như trong repo này: github.com/bodiddlie/rxheroes/blob/master/app/effects/hero.ts Và cũng luôn luôn thực hiện hoặc không bao giờ. Hãy kiên định vì lợi ích của thần có thể quan sát được.
Eric Bishard

2
fish$vsfish€$
Martin Schneider

11

Cập nhật : https://angular.io/guide/rx-l Library # tên-conventions-for-observables

Vì các ứng dụng Angular chủ yếu được viết bằng TypeScript, nên bạn thường sẽ biết khi nào một biến có thể quan sát được. Mặc dù khung Angular không thực thi quy ước đặt tên cho các vật quan sát, nhưng bạn sẽ thường thấy các vật quan sát được đặt tên bằng một dấu hiệu $ $ trailing.

Điều này có thể hữu ích khi quét qua mã và tìm kiếm các giá trị quan sát được. Ngoài ra, nếu bạn muốn một tài sản lưu trữ giá trị gần đây nhất từ ​​một vật có thể quan sát được, có thể thuận tiện chỉ đơn giản là sử dụng cùng tên có hoặc không có tên $ $.


Bản gốc :

Tôi đã thấy các biến kết thúc $khi đọc hướng dẫn anh hùng chính thức:

<div id="search-component">
  <h4>Hero Search</h4>

  <input #searchBox id="search-box" (keyup)="search(searchBox.value)" />

  <ul class="search-result">
    <li *ngFor="let hero of heroes$ | async" >
      <a routerLink="/detail/{{hero.id}}">
        {{hero.name}}
      </a>
    </li>
  </ul>
</div>

Nhìn kỹ và bạn sẽ thấy rằng * ngFor lặp đi lặp lại qua một danh sách được gọi heroes$, không phải anh hùng .

<li *ngFor="let hero of heroes$ | async" >

$ Là một quy ước chỉ ra các anh hùng $ là một Quan sát, không phải là một mảng.

Hầu hết các trường hợp là chúng tôi không đăng ký vào các biến quan sát trong thành phần. Chúng tôi thường sử dụng AsyncPipe để tự động đăng ký các biến quan sát

Tôi chưa tìm thấy nó trong Style Guide kể từ khi Angular5.1 phát hành ngày hôm qua (ngày 6 tháng 12 năm 2017).


Từ hướng dẫn phong cách Angular 9heroes: Observable<Hero[]>;
Ricardo Saracino

9

Tôi chưa thấy điều này $trong hướng dẫn về phong cách nhưng tôi thấy nó được sử dụng thường xuyên cho các thuộc tính công cộng đề cập đến các vật quan sát có thể được đăng ký.

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.