2014-09-04 14 views
27

Trong the AngularJS documentation, có giải thích về sự khác biệt giữa nhà máy, dịch vụ, giá trị, hằng số và nhà cung cấp.Loại tiêm thân thiện là gì?

At the end, chúng tôi có bảng so sánh: Comparison table Một trong các hàng là "loại tiêm thân thiện". Tôi không thể hiểu nó là gì.

Điều đó có nghĩa là gì? Ngoài ra, điều đó có nghĩa là, để một giá trị sẽ có "loại tiêm thân thiện" này, là chi phí của "khởi tạo mong muốn bằng cách sử dụng toán tử mới trực tiếp"?

Trả lời

11

Trong AngularJS, bạn có thể tiêm phụ thuộc theo nhiều cách:

  • trong chỉ thị link chức năng bởi vị trí
  • trong định nghĩa chỉ thị theo tên
  • trong hàm điều khiển theo tên
  • trong chức năng của nhà máy theo tên
  • trong chức năng dịch vụ theo loại

Loại tiêm thân thiện cho phép bạn implicity gọi một hàm constructor bằng cách tham khảo:

myApp.service('Pattern', ["Infinity", RegExp]); 

chứ không phải bằng explicity sử dụng new keyword:

myApp.factory('Pattern', 
["Infinity", function(Infinity) 
    { 
    return new RegExp(Infinity); 
    } 
]); 

HOẶC

function goInfinity(Infinity) 
    { 
    return new RegExp(Infinity); 
    } 

goInfinity.$inject = ["Infinity"]; 
myApp.factory('Pattern', goInfinity); 

Công thức Dịch vụ tạo ra một dịch vụ giống như V alue hoặc công thức Factory, nhưng nó làm như vậy bằng cách gọi một constructor với toán tử mới. Hàm khởi tạo có thể lấy 0 hoặc nhiều đối số, đại diện cho các phụ thuộc cần thiết cho cá thể loại này.

khởi háo hức có nghĩa là một công thức constant phải trả lại một constructor để sử dụng cú pháp nêu trên:

function RegExpConstant() 
    { 
    return new RegExp(Infinity); 
    } 

myApp.constant('Pattern', RegExpConstant) 

thay vì trở về một hàm, đối tượng, hoặc giá trị văn chương.

Các thuật ngữ xuất phát từ Java:

Một dịch vụ là một tập nổi tiếng của giao diện. Nhà cung cấp dịch vụ là một triển khai cụ thể của dịch vụ. Một nhà máy là một đối tượng mà trả về một tham chiếu đối tượng để đối tượng khác

Tài liệu tham khảo

+0

@paulsweatte 'góc là mùa xuân, phản ứng không phải là' –

5

Loại đây đề cập đến:

  • nguyên thủy,
  • literals đối tượng,
  • chức năng, hoặc
  • thậm chí là một thể hiện của một kiểu tùy chỉnh

nhà máy và Nhà cung cấp linh hoạt nhất trong số Dịch vụ, Hằng số, Giá trị về những gì chúng liên kết với bộ phun. Do đó góc có thể phát hiện loại đối tượng/nguyên thủy được ràng buộc với dịch vụ, hằng số, giá trị do đó thân thiện hơn vì chúng ta biết kiểu trả trước (thiết kế/thời gian xây dựng).

9

giải thích của tôi về "loại tiêm thân thiện":

nhà máy và nhà cung cấp tiêm bất cứ điều gì được trả về bởi hàm nhà máy và nhận được $ function tương ứng, mà có thể là của bất kỳ loại và khả năng có thể thay đổi tự động khi chạy. Trong khi đó dịch vụ, không đổi và giá trị tiêm là một loại cố định mà Angular là nhận thức được vì nó cũng được xác định trong định nghĩa của công thức. Do đó họ là loại tiêm thân thiện.

2

Tôi vừa tự hỏi mình cùng một câu hỏi khi nhìn vào cùng một bảng. :-)

Giải thích đoán tốt nhất của tôi về các giá trị trong hàng trong bảng đó là thực tế có nghĩa là ''. constructor thuộc tính được đặt thành hàm có ý nghĩa '.

Dưới đây là một giải thích chi tiết hơn cho mỗi người trong số các công thức nấu ăn:

  • nhà máy: không, nhưng có thể nếu bạn xây dựng giá trị trả về bằng cách gọi các nhà điều hành new
  • dịch vụ: - sẽ tham chiếu chức năng công thức dịch vụ
  • giá trị/liên tục: , nhưng chỉ khi bạn xây dựng các giá trị bằng cách gọi các nhà điều hành new
  • cung cấp: không, nhưng có thể nếu bạn xây dựng giá trị trả về các provider.$get phương pháp của bằng cách gọi nhà điều hành new nội bộ)

Hiện tại, phần tài liệu này dường như chưa hoàn thành và có thể là tác giả ha d một số ý tưởng về những gì ông muốn hiển thị ở đây nhưng tài liệu cuối cùng được quản lý để trượt qua các vết nứt & đã được xuất bản ở một số trạng thái trung gian.

+0

Đây là lời giải thích hợp lý nhất mà tôi có thể nghĩ quá. Đó là một cách cực kỳ không tự nhiên để mô tả khái niệm này trong JS, nhưng sau đó tôi nhận ra nó phải ở đó như là một phần của việc mở đường cho ng2/TypeScript, điều này sẽ liên quan đến việc có một sự bảo đảm có thể phân tích cụ thể. Đó là lý do tại sao nhà máy và nhà cung cấp không phải là 'có', thậm chí không có' có * '; chắc chắn, bạn có thể sử dụng một hàm tạo bên trong một trong hai, nhưng tôi không chắc phân tích tĩnh có thực sự có thể xác nhận kiểu dứt khoát hay không. – Semicolon

+0

(Tôi nghĩ rằng nó sẽ giúp ích rất nhiều nếu họ đã dán nhãn hàng "là loại thân thiện khi được tiêm ở nơi khác" hoặc một cái gì đó thay vì "sử dụng tiêm thân thiện với loại", vì sau này làm cho bạn nghĩ rằng họ đang đề cập đến tiêm _of các recipe_ - đó là lý do tại sao tôi đã ban đầu ngạc nhiên khi thấy 'constant' và' value' nhận được đánh dấu "có *".) – Semicolon

Các vấn đề liên quan