AngularJS vs Angular [đã đóng]


157

Mấy tháng trước, tôi quyết định học Angular. Khi tôi thực hiện một số tiến bộ và tạo một số ứng dụng bằng cách sử dụng nó, tôi nhận ra rằng Angular 2 nằm trong bản xem trước của Nhà phát triển, vì vậy vấn đề là thời gian trước khi nó được phát hành. Bởi vì Angular 2 sẽ không tương thích với Angular 1, và có rất nhiều thay đổi, câu hỏi đặt ra là tốt hơn nên tiếp tục phát triển với Angular 1.x hay bắt đầu phát triển Angular 2?

Có một thực tế là chúng ta không phải luôn luôn sử dụng phiên bản mới nhất cũng như ngôn ngữ mới nhất trên thị trường, nhưng trong trường hợp này, ứng dụng vẫn còn nhỏ để tôi có thể thay đổi mà không gặp vấn đề gì.


1
Tôi sẽ thử với góc 1 trước. Có những giai điệu của các giải pháp, và nhiều câu trả lời cho nhiều câu hỏi. Có lẽ góc 1,5 sẽ là cầu nối tới 2. Góc 2 vẫn trông hơi giống góc 1, vì vậy tôi sẽ thử 1, vì, không có ngày cụ thể nào mà 2 sẽ sẵn sàng sản xuất.
ssuperczynski



80
StackOverflow để lại một khoảng trống cho Quora. Tất cả các câu hỏi được đóng như dựa trên ý kiến ​​hoặc không phù hợp hiện đang hiển thị trên Quora và trên công cụ tìm kiếm cao hơn so với stackoverflow. Khá xấu hổ. Tôi không thấy có gì sai khi đặt câu hỏi như vậy trên SO nơi công nghệ có chiều sâu và chiều rộng như vậy. Tất cả chúng ta đều bị thách thức với những câu hỏi như vậy hàng ngày, chọn một câu hỏi khác. hãy cho phép câu hỏi thực sự được hỏi và trả lời.
Priyank

Sử dụng tên AngularJS cho bất kỳ bản phát hành 1.x nào và Angular cho bất kỳ bản phát hành 2+ nào. Xem Hướng dẫn xây dựng thương hiệu cho Angular và AngularJS .
georgeawg

Câu trả lời:


157

Hãy để tôi mở đầu bằng cách nói, tôi cho rằng bạn và tất cả những người sẽ đọc nó đã thoải mái với Angular 1 ( bây giờ được gọi là AngularJS , trái ngược với Angular cho các phiên bản mới hơn). Điều đó đang được nói, chúng ta hãy đi vào một số bổ sung và sự khác biệt chính trong Angular 2+.

  1. Họ thêm một góc cli.

Bạn có thể bắt đầu một dự án mới bằng cách chạy ng new [app name]. Bạn có thể phục vụ dự án của mình bằng cách chạy ng serve tìm hiểu thêm tại đây: https://github.com/angular/angular-cli

  1. Mã góc của bạn được viết bằng ES6 Typecript và nó biên dịch khi chạy thành Javascript trong trình duyệt.

Để hiểu rõ hơn về điều này, tôi khuyên bạn nên kiểm tra một số danh sách tài nguyên tôi có ở cuối câu trả lời của mình.

  1. Kết cấu dự án

Trong cấu trúc cơ bản, bạn sẽ có một app/tsthư mục nơi bạn sẽ thực hiện hầu hết công việc của mình và app/jsbạn sẽ tìm thấy trongapp/js tệp thư mục có .js.mapphần mở rộng. Chúng "ánh xạ" các tệp ".ts" của bạn sang trình duyệt của bạn để gỡ lỗi vì trình duyệt của bạn không thể đọc bản thảo gốc.

Cập nhật : Đã hết bản beta. Cấu trúc dự án đã thay đổi một chút, trong hầu hết các trường hợp và nếu bạn đang sử dụng cli góc, bạn sẽ làm việc trong src/app/thư mục. Trong một dự án khởi đầu, bạn sẽ có những điều sau đây.

app.component.css 
app.component.html
app.component.spec.ts
app.component.ts 
app.module.ts
index.ts

app.component.css : Tệp CSS bạn nên sử dụng cụ thể chocomponent.html

app.component.html : Một khung nhìn (biến được khai báo trong app.component.js)

app.component.spec.ts : được sử dụng để thử nghiệmapp.component.ts

app.component.ts : Mã của bạn liên kết vớiapp.component.html

app.module.ts : Đây là thứ khởi đầu ứng dụng của bạn và nơi bạn xác định tất cả các plugin, thành phần, dịch vụ, v.v ... Điều này tương đương với app.jstrong Angular 1

index.ts được sử dụng để xác định hoặc xuất các tệp dự án

Thông tin bổ sung:
Pro tip: bạn có thể chạy ng generate [option] [name]để tạo các dịch vụ, thành phần, đường ống mới, v.v.

Ngoài ra tsconfig.jsontệp rất quan trọng vì nó xác định quy tắc biên dịch TS cho dự án của bạn.

Nếu bạn đang nghĩ tôi phải học một ngôn ngữ hoàn toàn mới? ... Uh ... kinda, TypeScript là một siêu bộ JavaScript. Đừng sợ hãi; nó ở đó để làm cho sự phát triển của bạn dễ dàng hơn. Tôi cảm thấy như mình đã nắm bắt được nó chỉ sau vài giờ chơi với nó, và đã có tất cả sau 3 ngày.

  1. Bạn liên kết với HTML của mình tương tự như cách bạn sẽ làm nếu trong chỉ thị Angular 1. Vì vậy, biến như $scope$rootScopeđã được phản đối.

Điều này bạn có thể đã được ngụ ý. Angular 2 vẫn là một MV *, nhưng bạn sẽ sử dụng ' các thành phần ' như một cách để liên kết mã với các mẫu của bạn, ví dụ, thực hiện như sau

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

    @Component({
         selector:'my-app',
         template: '<h1> Hello World! </h1>'
    })

    export class AppComponent {}

Ở đây nghĩ về importtuyên bố như tiêm phụ thuộc của bạn trong bộ điều khiển v1. Bạn sử dụng importđể nhập các gói của mình, nơi import {Component}nói rằng bạn sẽ thực hiệncomponent bạn muốn liên kết vớiHTML .

Chú ý @Componenttrang trí bạn có một selectortemplate. Dưới đây nghĩ về selectornhư của bạn $scopemà bạn sử dụng như bạn sử dụng v1 directivesnơi tên của selectorlà những gì bạn sử dụng để bám vào HTML của bạn như vậy

<my-app> </my-app>

Trong trường hợp <my-app>là tên của thẻ tùy chỉnh của bạn, bạn sẽ sử dụng mà sẽ hoạt động như một giữ chỗ cho những gì đang khai báo trong mẫu của bạn. ví dụ) <h1> Hello World! </h1>. Trong khi điều này sẽ trông giống như sau trong v1:

HTML

<h1>{{hello}}</h1>

Mã não

$scope.hello = "Hello World!"

Ngoài ra, bạn có thể thêm một cái gì đó giữa các thẻ này để tạo một thông báo tải, như thế này:

<my-app> Loading... </my-app> 

Sau đó, nó sẽ hiển thị " Đang tải ... " dưới dạng thông báo đang tải.

Lưu ý rằng những gì được khai báo templatelà đường dẫn hoặc HTML thô bạn sẽ sử dụng trong thẻ HTMLcủa mình selector.


Việc triển khai Angular 1 đầy đủ hơn sẽ giống như thế này:

HTML

<h1 ng-controller="myCtrl">{{hello}}</h1>

Trong v1, nó sẽ trông giống như

Mã não

angular.module('controller', [])



.controller('myCtrl', function( $scope) {
    $scope.hello = "Hello World!"
})

Đây là những gì tôi thực sự thích về v2. Tôi thấy chỉ thị là một đường cong học tập dốc đối với tôi trong v1 và ngay cả khi tôi nhận ra chúng, tôi thường có CSSkết xuất không như tôi dự định. Tôi thấy đây là cách đơn giản hơn.

V2 cho phép khả năng mở rộng dễ dàng hơn cho ứng dụng của bạn vì bạn có thể chia nhỏ ứng dụng của mình dễ dàng hơn so với trong v1. Tôi thích cách tiếp cận này vì bạn có thể có tất cả các phần làm việc của mình trong một tệp thay vì có một số trong v1 góc.

Điều gì về việc chuyển đổi dự án của bạn từ v1 sang v2?


Từ những gì tôi đã nghe từ nhóm phát triển nếu bạn muốn cập nhật dự án v1 của mình lên v2, bạn sẽ trải qua và xóa các đốm màu không dùng nữa và thay thế $scopes của bạn bằng selectors. Tôi thấy video này hữu ích. Đó là với một số nhóm Ionic đang làm việc sát cánh với nhóm góc cạnh vì v2 tập trung mạnh mẽ hơn vào điện thoại di động https://youtu.be/OZg4M_nWuIk Hy vọng điều này sẽ giúp ích.

CẬP NHẬT: Tôi đã cập nhật bằng cách thêm các ví dụ khi triển khai chính thức của Angular 2 đã xuất hiện.

CẬP NHẬT 2: Đây dường như vẫn là một câu hỏi phổ biến vì vậy tôi chỉ nghĩ rằng tôi có một số tài nguyên tôi thấy rất hữu ích khi tôi bắt đầu làm việc với góc 2.

Tài nguyên hữu ích:

Để biết thêm về ES6, tôi khuyên bạn nên xem The New Boston's Hướng dẫn về tính năng mới ECMAScript 6 / ES6 của Boston mới - Danh sách phát YouTube

Để viết các hàm Bản in và xem cách chúng biên dịch sang Javascript, hãy kiểm tra Ngôn ngữ bản in

Để xem chức năng phân tích chức năng của tương đương Angular 1 trong Angular 2, hãy xem Angular.io - Cookbook -A1 A2 Tham khảo nhanh


Nếu tôi duy trì cả Angular 1 & 2 trên cùng một ứng dụng, tôi sẽ tăng hiệu suất gấp 5 lần khi kết xuất trang trong đó các trang được kích hoạt Angular 2?
Sampath

1
@Sampath Tôi nghi ngờ có bất kỳ thay đổi hiệu suất đáng chú ý nào trong 99% tất cả các ứng dụng. AFAIK các khái niệm đằng sau A2 giống như đằng sau A1, chỉ có cú pháp đã thay đổi một chút.
Hubert Grzeskowiak

Đây là một so sánh ngắn gọn súc tích tốt. Tôi sẽ đánh dấu nó như một tài liệu tham khảo nhanh. cộng với một từ tôi
Fouad Boukredine

38

Nó có thể giúp bạn hiểu được sự so sánh giữa Angular 1 vs Angular 2.

The Angular 2 đã chứng minh có rất nhiều lợi ích so với Angular 1:

  • Nó hoàn toàn dựa trên thành phần.
  • Phát hiện thay đổi tốt hơn
  • Biên dịch trước thời gian (AOT) cải thiện tốc độ kết xuất.
  • TypeScript chủ yếu được sử dụng để phát triển các ứng dụng Angular 2.
  • Angular 2 có hiệu suất tốt hơn Angular 1.
  • Angular 2 có hệ thống tạo khuôn mạnh mẽ hơn Angular 1.
  • Angular 2 có API đơn giản hơn, lười tải, gỡ lỗi dễ dàng hơn.
  • Angular 2 dễ kiểm tra hơn nhiều so với Angular 1.
  • Angular 2 cung cấp các thành phần lồng nhau.
  • Angular 2 cung cấp một cách để thực thi nhiều hơn hai hệ thống với nhau.
  • Và như thế...

1
Về hiệu suất, có các bài kiểm tra để so sánh? Ngoài ra, trong đó SPA có hiệu suất đứng ở vị trí số 1? Các thành phần lồng nhau cũng có sẵn trong A1. Không biết ý của bạn là gì ở điểm cuối cùng, nhưng AFAIK bạn có thể có nhiều ứng dụng ng trên một trang
Hubert Grzeskowiak

1
Angular 2 có hiệu suất tốt hơn Angular 1. Điều này hoàn toàn sai, hãy chứng minh điều đó bằng một số điểm chuẩn có liên quan;)
amdev

2
Hãy cho chúng tôi, làm thế nào là sai? :) và câu trả lời của bạn là ở đây cho các vấn đề về Hiệu suất trong Angular 1. quirksmode.org/blog/archives/2015/01/the_pro Hiệu_wit.html
Anil Singh

15

Angular 2 và Angular 1 về cơ bản là một khung khác nhau có cùng tên.

angular 2 đã sẵn sàng hơn cho trạng thái hiện tại của các tiêu chuẩn web và trạng thái tương lai của web (ES6 \ 7, tính không thay đổi, các thành phần, DOM bóng, nhân viên dịch vụ, tương thích di động, mô-đun, bản thảo, v.v.)

angular 2 đã giết chết nhiều tính năng chính trong angular 1 like - bộ điều khiển, $ scope, chỉ thị (được thay thế bằng chú thích @component), định nghĩa mô-đun và hơn thế nữa, ngay cả những điều đơn giản như ng-repeat cũng không còn như trước.

Dù sao đi nữa, thay đổi là tốt, góc 1.x có sai sót và góc 2 sẵn sàng hơn cho các yêu cầu web trong tương lai.

để tổng hợp mọi thứ - tôi không khuyên bạn nên bắt đầu một dự án 1.x góc cạnh ngay bây giờ - đây có lẽ là thời điểm tồi tệ nhất để làm như vậy vì bạn sẽ phải di chuyển sau này đến góc 2, tôi đặt bạn tâm trí về góc cạnh hơn là chọn góc cạnh 2, google đã đưa ra một dự án với góc 2, và khi bạn hoàn thành dự án thì góc 2 sẽ nằm trong tầm ngắm. nếu bạn muốn một cái gì đó ổn định hơn, bạn có thể nghĩ về phản ứng \ elm và thông lượng và chuyển hướng như các khung công tác JS.

angular 2 sẽ trở nên tuyệt vời, đó là điều không còn nghi ngờ gì nữa.


7

Không có khung là hoàn hảo. Bạn có thể đọc về sai sót trong Angular 1 tại đâyđây . Nhưng điều đó không có nghĩa là nó xấu. Câu hỏi là bạn đang giải quyết vấn đề gì. Nếu bạn muốn nhanh chóng tung ra một ứng dụng đơn giản, nhẹ, với việc sử dụng ràng buộc dữ liệu hạn chế thì hãy tiếp tục với Angular 1. Angular 1 được xây dựng 6 năm trở lại để giải quyết việc tạo mẫu nhanh mà nó hoạt động khá tốt. Ngay cả khi trường hợp sử dụng của bạn phức tạp, bạn vẫn có thể sử dụng Angular 1 nhưng sau đó bạn nên nhận thức được các sắc thái và cách thực hành tốt nhất xung quanh việc xây dựng một ứng dụng web phức tạp. Nếu bạn đang phát triển một ứng dụng cho mục đích học tập, tôi khuyên bạn nên chuyển sang Angular 2 vì đó là tương lai của Angular.


5

Tính năng nổi bật duy nhất trong Angular v2 và cả ReactJs là cả hai đều chấp nhận kiến ​​trúc phát triển Thành phần Web mới. Điều này có nghĩa là bây giờ chúng ta có thể tạo các Thành phần Web độc lập và cắm và phát chúng vào bất kỳ trang web nào trên thế giới có cùng ngăn xếp công nghệ của Thành phần Web này. Mát mẻ! vâng rất tuyệt :)

Sự thay đổi nổi bật nhất khác trong Angular v2 là ngôn ngữ phát triển chính của nó không ai khác ngoài TypeScript. Mặc dù TypeScript thuộc về Microsoft và nó là siêu ngôn ngữ của năm 2015 (hoặc ECMAScript6 / ES6), nhưng nó có một số tính năng rất hứa hẹn. Tôi muốn giới thiệu cho độc giả kiểm tra TypeScript một cách chi tiết (dĩ nhiên là thú vị) sau khi đọc hướng dẫn này.

Ở đây tôi muốn nói rằng những kẻ cố gắng liên quan đến Angular v1 và Angular v2 khiến người đọc nhầm lẫn hơn nữa, và theo ý kiến ​​khiêm tốn của tôi, Angular v1 và Angular v2 nên được coi là hai khung khác nhau. Trong Angular v2, chúng tôi có khái niệm phát triển các ứng dụng web, trong khi ở Angular v1, chúng tôi phải chơi với Bộ điều khiển và (thật đáng buồn hoặc may mắn) không có bộ điều khiển nào có mặt trong Angular v2.


3
Các thành phần cũng có sẵn trong Angular 1 kể từ phiên bản 1.5. Nhưng thực sự, điều này cũng có thể với các chỉ thị nguyên tố trước đây.
Hubert Grzeskowiak

Tôi không nghĩ điều đó đúng - Cả angular và React đều có kiến ​​trúc thành phần nhưng không phải kiến ​​trúc thành phần Web, là tiêu chuẩn w3c.
Nitin Jadhav

3

Một điều cần chú ý là angular2 đang sử dụng bản thảo.

Tôi đã làm angular1 với cordova trong thực tập sinh của tôi và bây giờ tôi đang làm một góc 2. Tôi nghĩ angular2 sẽ là xu hướng vì nó có cấu trúc hơn theo quan điểm của tôi nhưng nhược điểm là có ít tài nguyên để tham khảo khi bạn gặp vấn đề hoặc khó khăn. angular 1.x có hàng tấn các chỉ thị được cá nhân hóa có thể siêu dễ sử dụng.

Hy vọng nó giúp.


Cảm ơn. Chỉ thị là tồi tệ nhất cho hiệu suất trong Angular 1.x. Bạn phải rất cẩn thận hoặc tránh chúng
emmanuel sio

1

Angular 2 tốt hơn nhiều so với 1, ít nhất là trong những gì nó cung cấp: hỗ trợ cho các thành phần web, sử dụng bản in, hiệu năng và tính đơn giản của giao diện, là lý do tôi quyết định bắt đầu một dự án bằng angular 2. Tuy nhiên, từ việc di chuyển , Tôi nhận ra có những vấn đề ở góc 2 (ví dụ: định tuyến bằng apache) mà rất ít hoặc không có tài liệu nào có sẵn, vì vậy tài liệu và cộng đồng của góc 2 là cạm bẫy lớn nhất đối với góc 2, vì nó không được phát triển đủ.

Tôi sẽ nói, nếu bạn cần nhanh chóng tăng một trang web trong một thời hạn ngắn, hãy sử dụng góc 1 nổi tiếng, nếu bạn đang ở trong một dự án dài hơn và có thể dành thời gian để điều tra các vấn đề mới (mà bạn có thể là người đầu tiên gặp phải , có thể là một phần thưởng nếu bạn nghĩ đến sự đóng góp, bạn có thể dành cho cộng đồng 2 góc cạnh) hơn là đi với góc 2.

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.