AngularJS vs Angular [닫힘]


159

몇 달 전에 저는 Angular를 공부하기로 결정했습니다. 내가 발전하고 그것을 사용하여 응용 프로그램을 만들 때 Angular 2가 개발자 미리보기에 있음을 알았으므로 릴리스되기 전에 시간 문제입니다. Angular 2는 Angular 1과 호환되지 않으며 많은 변경 사항이 있으므로 문제는 Angular 1.x로 계속 개발하거나 Angular 2 개발을 시작하는 것이 낫습니까?

시장에서 항상 최신 버전이나 최신 언어를 사용해야 할 필요는 없지만이 경우 앱이 여전히 작기 때문에 문제없이 변경할 수 있습니다.


1
먼저 각도 1을 사용해보십시오. 솔루션의 톤과 많은 질문에 대한 많은 답변이 있습니다. 아마도 앵귤러 1.5는 2의 브리지가 될 것입니다. 앵귤러 2는 여전히 앵귤러 1과 약간 비슷해 보일 것입니다. 따라서 2가 생산 준비가 될 구체적인 날짜가 없기 때문에 1을 시도해 보겠습니다.
ssuperczynski



80
StackOverflow는 Quora에 틈을 남겼습니다. 의견 기반이거나 적합하지 않은 이러한 모든 질문은 이제 Quora에서 검색 엔진에서 stackoverflow보다 높습니다. 매우 부끄러운 일입니다. 기술에 깊이와 폭이있는 SO에 대한 그런 질문을하는 것이 잘못 보이지 않습니다. 우리 모두는 매일 그러한 질문에 도전하면서 다른 것보다 하나를 선택합니다. 진정한 질문을하고 대답하도록하겠습니다.
Priyank

1.x 릴리스에는 AngularJS, 2+ 릴리스에는 Angular라는 이름을 사용하십시오. Angular 및 AngularJS에 대한 브랜딩 지침을 참조하십시오 .
georgeawg

답변:


157

제가 당신을 가정하고 있는데이 글을 읽는 것 모두가 이미 편안하게 각도 1 인, 말함으로써 서문 보자 ( 지금이라 AngularJS와 단순히 반대로, 각도 최신 버전). 즉, Angular 2+의 추가 사항과 주요 차이점에 대해 살펴 보겠습니다.

  1. 그들은 각도를 추가했습니다 cli.

을 실행하여 새 프로젝트를 시작할 수 있습니다 ng new [app name]. ng serve 자세한 내용은 https://github.com/angular/angular-cli를 실행하여 프로젝트를 제공 할 수 있습니다 .

  1. 각도 코드는 ES6 Typescript로 작성되며 브라우저에서 런타임에 Javascript로 컴파일됩니다.

이것에 대해 완전히 이해하려면 답변 맨 아래에있는 리소스 목록을 확인하는 것이 좋습니다.

  1. 프로젝트 구조

기본 구조에는 app/ts대부분의 작업을 수행 app/jsapp/js폴더와 .js.map확장명이 있는 폴더 파일이 있습니다. 브라우저는 기본 유형 스크립트를 읽을 수 없으므로 디버깅을 위해 ".ts"파일을 브라우저에 "매핑"합니다.

업데이트 : 베타 버전이 아닙니다. 대부분의 경우 프로젝트 구조가 약간 변경되었으며 각도 클리를 사용하는 경우 src/app/폴더 에서 작업 합니다. 초보자 프로젝트에는 다음이 있습니다.

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

app.component.css : 특정 CSS 파일을 사용해야합니다.component.html

app.component.html : 뷰 (app.component.js에 선언 된 변수)

app.component.spec.ts : 테스트에 사용app.component.ts

app.component.ts : 바인딩하는 코드app.component.html

app.module.ts : 앱을 시작하고 모든 플러그인, 구성 요소, 서비스 등을 정의하는 위치입니다. 이것은 app.jsAngular 1 과 같습니다.

프로젝트 파일을 정의하거나 내보내는 데 사용되는 index.ts

추가 정보 :
프로 팁 : ng generate [option] [name]새로운 서비스, 구성 요소, 파이프 등을 생성하기 위해 실행할 수 있습니다 .

또한 tsconfig.json파일은 프로젝트의 TS 컴파일 규칙을 정의하므로 중요합니다.

내가 완전히 새로운 언어를 배워야 한다고 생각한다면 ? ... 어 ... 일종의 TypeScript는 JavaScript의 상위 집합입니다. 협박하지 마십시오. 개발을보다 쉽게하기 위해 존재합니다. 나는 단지 몇 시간 동안 그것을 가지고 놀고 난 후에 그것을 잘 이해하고 3 일 후에 그것을 모두 가지고있는 것처럼 느꼈습니다.

  1. Angular 1 지시문에서와 비슷한 방식으로 HTML에 바인딩합니다. 그래서 변수는 좋아 $scope하고 $rootScope더 이상 사용되지 않습니다.

이것은 당신이 암시했을 수도 있습니다. Angular 2는 여전히 MV * 이지만 코드를 템플릿에 바인딩하는 방법으로 ' components '를 사용 합니다. 예를 들어 다음을 수행하십시오.

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

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

    export class AppComponent {}

여기서는이 import명령문을 v1 컨트롤러의 종속성 주입 이라고 생각합니다 . 당신이 사용 import하는 수입 (가) 어디, 패키지를 import {Component}당신이 만드는거야라고 component당신이 결합하고 싶습니다 HTML.

통지 @Component당신이 장식을 selector하고 template. 여기서는 v1을 사용하는 것처럼 사용 하는 selector것으로 생각 하십시오. 여기서의 이름은 HTML에 바인딩하는 데 사용 하는 이름입니다.$scopedirectivesselector

<my-app> </my-app>

어디에서 <my-app>사용자 정의 태그의 이름입니다 당신은 당신의 템플릿에 선언 있는지에 대한 자리 표시 자 역할을 할 것을 사용합니다. 즉) <h1> Hello World! </h1>. v1에서는 다음과 같이 표시됩니다.

HTML

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

JS

$scope.hello = "Hello World!"

또한 이러한 태그 사이에 무언가를 추가하여 다음과 같이 로딩 메시지를 생성 할 수 있습니다.

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

그러면 로딩 메시지로 " Loading ... " 이 표시됩니다 .

에 선언 된 template것은 태그 HTML에서 사용할 경로 또는 원시 HTML selector입니다.


Angular 1의 완전한 구현은 다음과 같습니다.

HTML

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

v1에서는 다음과 같이 보입니다.

JS

angular.module('controller', [])



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

이것이 제가 v2에 대해 정말로 좋아하는 것입니다. v1에서 지시어가 가파른 학습 곡선이라는 것을 알았고, 내가 알아 냈을 때조차도 CSS내가 의도 한대로 렌더링하지 않은 경우가 많았습니다 . 나는 이것이 더 간단하다는 것을 알았습니다.

V2를 사용하면 v1에서보다 쉽게 ​​앱을 분할 할 수 있으므로 앱의 확장 성이 더 쉬워집니다. 각도 v1에 여러 개가있는 것이 아니라 모든 작업 부품을 하나의 파일에 넣을 수 있기 때문에이 방법이 마음에 듭니다.

프로젝트를 v1에서 v2로 변환하는 것은 어떻습니까?


v1 프로젝트를 v2로 업데이트하려면 개발 팀에서 들었던 내용에서 더 이상 사용되지 않는 얼룩을 삭제하고을 $scopes로 selector바꿉니다. 이 비디오가 도움이되었다는 것을 알았습니다. v2는 모바일 https://youtu.be/OZg4M_nWuIk 에 더 중점을두기 때문에 각도 팀과 나란히 작업하는 일부 Ionic 팀과 함께합니다 .

업데이트 : Angular 2의 공식 구현이 등장함에 따라 예제를 추가하여 업데이트했습니다.

업데이트 2 : 이것은 여전히 ​​인기있는 질문 인 것처럼 보이므로 각도 2로 작업을 시작할 때 매우 도움이되는 리소스가 있다고 생각했습니다.

유용한 자료 :

ES6에 대한 자세한 내용은 New Boston의 ECMAScript 6 / ES6 새로운 기능 자습서-YouTube 재생 목록을 참조하십시오.

Typescript 함수를 작성하고 Javascript로 컴파일하는 방법을 보려면 Typescript language Playground를 확인하십시오.

Angular 1에 해당하는 Angular 1의 기능 분석을 통해 함수를 보려면 Angular.io-Cookbook -A1 A2 빠른 참조를 참조하십시오.


동일한 앱에서 Angular 1과 2를 둘 다 유지하면 Angular 2가 활성화 된 페이지의 페이지 렌더링 성능이 5 배 향상됩니까?
Sampath

1
@ Sampath 나는 모든 앱의 99 %에서 눈에 띄는 성능 변화가 의심됩니다. AFAIK A2의 개념은 A1의 개념과 동일하지만 구문 만 약간 변경되었습니다.
Hubert Grzeskowiak

이것은 짧은 간결한 비교입니다. 빠른 참조로 책갈피를 지정합니다. 플러스 하나
Fouad Boukredine 22:53에

39

Angular 1과 Angular 2의 비교를 이해하는 데 도움이 될 수 있습니다.

Angular 2는 Angular 1보다 많은 이점을 가지고 있음이 입증되었습니다.

  • 전적으로 구성 요소 기반입니다.
  • 더 나은 변화 감지
  • AOT (Ahead of Time compilation)는 렌더링 속도를 향상시킵니다.
  • TypeScript는 주로 Angular 2 응용 프로그램 개발에 사용됩니다.
  • Angular 2는 Angular 1보다 성능이 뛰어납니다.
  • Angular 2에는 Angular 1보다 강력한 템플릿 시스템이 있습니다.
  • Angular 2는 더 간단한 API, 게으른 로딩, 더 쉬운 디버깅을 제공합니다.
  • Angular 2는 Angular 1보다 훨씬 더 테스트 가능합니다.
  • 각도 2는 중첩 된 구성 요소를 제공합니다.
  • Angular 2는 둘 이상의 시스템을 함께 실행할 수있는 방법을 제공합니다.
  • 등등...

1
성능과 관련하여 비교 테스트가 있습니까? 또한 어느 SPA에서 성능이 1 위를 차지합니까? 중첩 구성 요소는 A1에서도 사용할 수 있습니다. 어떤 아이디어는 당신이 마지막 점으로 무엇을 의미 없지만, AFAIK 당신은 한 페이지에 여러 NG-애플 리케이션을 가질 수 있습니다
휴 버트 Grzeskowiak

1
Angular 2는 Angular 1보다 나은 성능을 제공합니다. 이것은 완전히 틀 렸습니다. 일부 관련 벤치 마크로 증명하십시오.)
amdev

2
어떻게 잘못 됐나요? : 당신의 대답은 각도 1에서 성능 문제가 여기에있다 quirksmode.org/blog/archives/2015/01/the_problem_wit.html
아닐 싱

16

Angular 2와 Angular 1은 기본적으로 같은 이름을 가진 다른 프레임 워크입니다.

앵귤러 2는 현재 웹 표준 상태와 웹의 미래 상태 (ES6 \ 7, 불변성, 구성 요소, 섀도우 DOM, 서비스 워커, 모바일 호환성, 모듈, 타입 스크립트 등)에보다 적합합니다.

각도 2는 각도 1과 같은 컨트롤러, $ scope, 지시문 (@component 주석으로 대체 됨), 모듈 정의 등 많은 주요 기능을 죽였습니다. 심지어 ng-repeat와 같은 간단한 것조차도 그대로 유지되지 않았습니다.

어쨌든, 변화는 양호하고, 앵귤러 1.x는 결함이 있었고, 앵귤러 2는 미래의 웹 요구 사항에 더 적합합니다.

요약하면-지금 각도 1.x 프로젝트를 시작하지 않는 것이 좋습니다-나중에 각도 2로 마이그레이션해야하기 때문에 아마도 최악의 시간 일 것입니다. 각도를 선택하는 것보다 각도에 대해 마음을 설정하십시오 2, 구글은 이미 각도 2로 프로젝트를 시작했으며 프로젝트 완료시 각도 2가 이미 주목 받고 있어야합니다. 보다 안정적인 것을 원한다면 react \ elm과 flux 및 redux를 JS 프레임 워크로 생각할 수 있습니다.

각도 2는 대단합니다. 의심 할 여지가 없습니다.


8

완벽한 프레임 워크는 없습니다. Angular 1의 결함에 대해서는 여기여기 에서 읽을 수 있습니다 . 그러나 그것이 나쁘다는 것을 의미하지는 않습니다. 문제는 어떤 문제를 해결하고 있는지입니다. 데이터 바인딩 사용량 이 제한적인 간단한 간단한 앱을 신속하게 출시하려면 Angular 1을 사용하십시오. Angular 1은 6 년 전에 빠른 프로토 타입을 해결하기 위해 만들어졌습니다. 사용 사례가 여전히 복잡하더라도 Angular 1을 사용할 수 있지만 복잡한 웹 앱을 구축하는 데 필요한 뉘앙스와 모범 사례를 알고 있어야합니다. 학습 목적으로 응용 프로그램을 개발하는 경우 Angular의 미래가있는 Angular 2로 이동하는 것이 좋습니다.


5

Angular v2 및 ReactJs의 뛰어난 기능 중 하나는 새로운 웹 컴포넌트 아키텍처 개발을 채택했다는 것입니다. 이것이 의미하는 바는 이제 독립적 인 웹 구성 요소를 만들어이 웹 구성 요소와 동일한 기술 스택을 가진 세계의 모든 웹 사이트에 플러그 앤 플레이 할 수 있다는 것입니다. 멋있는! 그래 정말 멋지다. :)

Angular v2에서 가장 눈에 띄는 변화는 기본 개발 언어가 TypeScript 외에는 없다는 것입니다. TypeScript는 Microsoft에 속하지만 2015 년 JavaScript (또는 ECMAScript6 / ES6)의 상위 세트이지만 매우 유망한 기능이 있습니다. 이 튜토리얼을 읽은 후에 독자들이 TypeScript를 조금 자세히 살펴 보는 것이 좋습니다 (물론 재미 있습니다).

여기서 나는 Angular v1과 Angular v2를 서로 연관시키려는 사람들이 독자들을 혼란스럽게한다고 말하고 싶습니다. 그리고 Angular v1과 Angular v2는 두 개의 다른 프레임 워크로 취급되어야합니다. Angular v2에는 웹 응용 프로그램 개발에 대한 웹 구성 요소의 개념이 있지만 Angular v1에서는 컨트롤러와 함께 플레이해야하며 Angular v2에는 컨트롤러가 없습니다 (슬프게도 운 좋게도).


3
버전 1.5 이후 Angular 1에서도 사용 가능한 구성 요소입니다. 그러나 실제로 이것은 이전의 요소 지시문에서도 가능했습니다.
Hubert Grzeskowiak

나는 그것이 옳지 않다고 생각한다.-angular와 React 모두 컴포넌트 아키텍처를 가지고 있지만 웹 컴포넌트 아키텍처는 없다. 이것은 w3c 표준이다.
Nitin Jadhav

3

주목해야 할 것은 angular2가 typescript를 사용한다는 것입니다.

내 인턴에서 코르도바로 angular1을 수행했으며 지금은 angular 2를하고 있습니다. angular2는 내 의견에 더 구조화 된 추세라고 생각하지만 문제 나 어려움이있을 때 참조 할 리소스가 거의 없다는 단점이 있습니다. angular 1.x에는 사용하기 매우 쉬운 수많은 개별 지시문이 있습니다.

도움이 되길 바랍니다.


감사. 지시문은 Angular 1.x에서 성능이 최악입니다. 당신은 매우 조심하거나 피해야합니다
emmanuel sio

1

Angular 2는 적어도 제공하는 것에서 1보다 훨씬 낫습니다. 유형 2를 사용하여 프로젝트를 시작하기로 결정한 이유는 형식 스크립트, 성능 및 인터페이스의 전반적인 단순성을 사용하여 웹 구성 요소를 지원하는 것입니다. , 나는 문서가 거의 없거나 전혀없는 각도 2 (예 : 아파치 라우팅)에 문제가 있음을 깨달았으므로 각도 2의 문서와 커뮤니티는 충분히 개발되지 않았기 때문에 각도 2의 가장 큰 함정입니다.

짧은 마감 시간 동안 사이트를 빠르게 올리려면 잘 알려진 각도 1을 사용하고 프로젝트가 길면 새로운 문제를 조사 할 시간을 가질 수 있습니다 (처음 발생할 수 있음) 기여도를 생각하면 보너스가 될 수 있습니다. 앵귤러 2와 함께하는 것보다 앵귤러 2 커뮤니티에 줄 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.