2013-10-09 17 views
11

Tôi đang cố gắng để có được góc đầu của tôi angularjs vào lúc này. Tôi hiện đang xem xét các dịch vụ mà tôi cũng đang sử dụng mã lệnh cho mã.Dịch vụ góc trong kịch bản kiểu với tiêm phụ thuộc và rút gọn

Giờ đây, từ các mẫu trên web, tôi đã thấy mọi người sử dụng thứ gì đó giống như dưới đây cho một dịch vụ trong bản in.

class Service 
{ 
    constructor(private $http: ng.IHttpService) 
    { 
    } 

    public MyMethod() 
    { 
     this.$http.get("/") 
      .success(null) 
      .error(null); 
    } 
} 

Bây giờ nếu điều này được rút gọn, tôi sẽ mất $http từ hàm tạo và góc yêu cầu tên biến. Vì vậy, tôi kiểm tra xung quanh và thấy rằng tôi có thể sử dụng $ inject thay vì constructor nhưng điều này cũng sẽ nhận được cùng một vấn đề minification.

Làm cách nào để mọi người xử lý việc rút gọn và góc cạnh trong ngữ cảnh loại? Tôi đang đấu tranh để tìm một số tài liệu vững chắc về cách xử lý này. Với tôi điều này có vẻ kỳ lạ khi có những vấn đề này trong một api hiện đại vì vậy tôi phải bỏ lỡ một cái gì đó ở đâu đó.

+1

Bạn có thể sử dụng trước khi uglifyid mô-đun "ngAnnotate" cho gulp, vì vậy nó sẽ ngăn chặn mất phụ thuộc trong góc. Ví dụ: gulp.src (paths.ts) .pipe (ts (ts.createProject ('tsconfig.json'))). Pipe (concat ('app.min.js')). (NgAnnotate ({remove : true, add: true, single_quotes: true})) pipe (uglify()) pipe (gulp.dest ('www/js /')) – ekussberg

Trả lời

16

Chỉ cần sử dụng cú pháp $inject. ví dụ. :

class Service 
{ 
    static $inject = ['$http'];  
    constructor(private $http: ng.IHttpService) 
    { 
    } 

    public MyMethod() 
    { 
     this.$http.get("/") 
      .success(null) 
      .error(null); 
    } 
} 

PS: Tôi đã làm một video chi tiết về đề tài này: http://www.youtube.com/watch?v=WdtVn_8K17E&hd=1

+0

Nhưng theo cách này, mỗi cá thể 'Service' sẽ có' $ Tham chiếu http. Trong JavaScript vanilla, phương thức 'angular.factory' thường được sử dụng để truy cập vào các phụ thuộc như vậy trong một bao đóng. Bạn sẽ đề xuất phương pháp hay nhất nào để đạt được điều này trong Bản đánh máy? – mhelvens

+0

Dịch vụ là những người độc thân. Sẽ chỉ có một thể hiện – basarat

+0

Javascript không biết về các lớp (hoặc singletons), và do đó AngularJS cũng vậy. Dịch vụ có thể là bất cứ điều gì. Tôi đã cung cấp 'lớp học' tức thời như dịch vụ cho các lứa tuổi. – mhelvens

0

Hiện nay trình biên dịch nguyên cảo chính thức vẫn không phát ra giao diện siêu dữ liệu mà có thể được sử dụng trong thời gian chạy cho một hệ thống DI. Có vấn đề về khả năng mở rộng Emitter here. Trong khi chờ đợi, tôi đã tạo một dự án mẫu (cùng với một phiên bản tùy biến của trình biên dịch TS phát ra siêu dữ liệu giao diện) của ứng dụng AngularJS 1.3 cung cấp Decorator để đăng ký các thành phần trong mô-đun ứng dụng và tiêm phụ thuộc sử dụng siêu dữ liệu lớp. Bạn có thể xem here.

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