2016-03-03 22 views
15

Tôi đã làm việc trong Angular 1.It rõ ràng đã có một bộ điều khiển hoạt động như một trung gian hòa giải giữa View và Model. Tôi nhận ra rằng trong Angular 2, chúng tôi không có bất kỳ bộ điều khiển nào như vậy.Là angular2 mvc?

Vậy chúng ta có thể gọi Angular 2 là một khung MVC không ?. Tôi biết MVC là một mẫu thiết kế và bạn thực hiện nó bằng bất kỳ ngôn ngữ nào. Nhưng, đối với Angular 1, tôi nghe từ nhiều người rằng đó là một khuôn khổ MVC, và hầu hết các ví dụ mà tôi thấy rõ ràng nói rằng Angular 1 là MVC và Controller tách Model khỏi View. Vì vậy, tôi đã tự hỏi, bây giờ có các thành phần trong Angular2, chúng ta có thể vẫn gọi nó là MVC? Hoặc như các thành phần của mình theo mô hình MVC, bởi vì tôi thấy rằng trong mỗi thành phần chúng ta làm riêng biệt Xem và dữ liệu và sử dụng ràng buộc, có lẽ chúng ta vẫn có thể gọi nó là một MVC.

+0

Không phải điều này giúp ích nhiều, nhưng tôi nghĩ nó được gọi là khung MV * (hoặc MVWhatever), vì vậy bạn có một số giấy phép về cách triển khai phần cuối cùng. – lintmouse

+1

Tài liệu hướng dẫn angular2 có tổng quan tuyệt vời về kiến ​​trúc. Nó có thể được tìm thấy ở đây: https://angular.io/docs/ts/latest/guide/architecture.html. Mặc dù Angular2 là thành phần dựa trên bạn vẫn có chế độ xem riêng biệt, phạm vi riêng biệt cho chế độ xem của bạn và các dịch vụ cho phép bạn kết nối với chương trình phụ trợ của mình. – user2263572

+0

Tôi chắc chắn sẽ xem xét Angular2 MVC. Dịch vụ sẽ là mô hình của bạn, Thành phần là sự kết hợp giữa Bộ điều khiển và Chế độ xem. Bạn đặt hầu hết các hàm chức năng của bạn và các hàm "Bộ điều khiển" trong lớp của bạn, và đính kèm khung nhìn của bạn vào nó thông qua templating. –

Trả lời

15

Góc 2 là cấu trúc dựa trên thành phần nhiều hơn. Bạn có thể giả định mọi thứ như là thành phần như chỉ thị, dịch vụ, v.v. Trong khi các chỉ thị và dịch vụ thực sự là để hỗ trợ các thành phần cơ bản, chúng cũng được định nghĩa theo kiểu tương tự. Một thành phần cơ sở chứa các phụ thuộc, một chi tiết xem và khai báo lớp có thể được coi là bộ điều khiển. Vì vậy, một thành phần được xác định rõ ràng bao gồm bộ kiến ​​trúc MVC riêng lẻ.

ví dụ (góc phiên bản 2 alpha):

import {Component, View, bootstrap, provide, NgClass} from 'angular2/angular2'; 

@Component({ 
    selector : "my-home" 
}) 

@View({ 
    directives : [NgClass, EditSettingPanel], 
    styles: ['.hidden{ display : none} .visible{ display : block}'], 
    templateUrl : "views/blog-panel.html" 
}) 
export class home { 
} 

} 

Trong ví dụ trên bạn có thể thấy rằng lớp "nhà" có thể được giả định là bộ điều khiển, Xem được viết với @View trang trí. Tùy chỉnh thành phần được đưa ra bởi trang trí @component. Ngoài ra, bạn có thể thấy thực hành tiêm phụ thuộc khác nhau.

EDIT :: Ví dụ (hiện tại góc 2/4 phiên bản)

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'custom-component', 
    templateUrl: './template.html', 
    styleUrls: ['./style.scss'], 
}) 
export class CustomComponent {} 

Tóm lại, khung góc 2 được thành phần dựa MVC kiến ​​trúc dựa.

+0

Đó là những gì tôi nghĩ. Nhưng không chắc liệu sự hiểu biết của tôi có đúng hay không. –

+3

Tôi nghĩ rằng @View đã bị xóa khỏi Angular 2. – Phil

7

Các thành phần và chỉ thị là bộ điều khiển, mẫu (HTML) được xử lý bởi Angular và trình duyệt là chế độ xem và nếu bạn không kết hợp mô hình với bộ điều khiển, bạn sẽ nhận được mẫu MVC.

+0

Những gì tôi thấy trong nhiều ví dụ trên web là những người sử dụng dịch vụ tạm thời (cá thể riêng biệt cho mỗi thành phần) để xác định phương pháp http để truy cập dữ liệu từ máy chủ, sau đó được lưu trữ trực tiếp trong các thành phần chế độ xem. Trong trường hợp này, bạn hoàn toàn không có lớp mô hình, do đó, để phối hợp hiển thị nhiều chế độ xem, bạn phải có chế độ xem riêng trực tiếp với nhau hoặc xoay vòng mọi tương tác qua máy chủ.Cố gắng thuyết phục nhóm của tôi rằng đây không phải là một cách tiếp cận phù hợp cho một SPA tương tác phong phú và rằng những gì chúng ta cần là một lớp mô hình thích hợp là chứng minh không thể. – Neutrino

+0

Dịch vụ là mô hình là tất cả. Nếu bạn hiển thị cùng một dữ liệu bạn chỉ chia sẻ một dịch vụ với nhiều thành phần. Thông thường, bạn nên sử dụng các quan sát để thông báo cho quan điểm về những thay đổi về dịch vụ. Một số đưa logic kinh doanh vào các thành phần, khác thích giữ các thành phần câm và có logic nghiệp vụ trong các dịch vụ. Bạn có thể có nhiều cấp độ dịch vụ (tùy thuộc hoặc nơi bạn cung cấp dịch vụ). Bạn có thể có một dịch vụ được cung cấp trực tiếp trên một thành phần (để lấy một cá thể khác cho mỗi cá thể thành phần), hoặc thành phần cha hoặc singleton như các dịch vụ bằng cách cung cấp chúng trong '@NgModule()' –