Açısal JS - Açısal [kapalı]


159

Aylar önce Angular çalışmaya karar verdim. Biraz ilerlerken ve bunu kullanarak bir uygulama oluştururken, Angular 2'nin Geliştirici önizlemesinde olduğunu fark ediyorum, bu yüzden yayınlanmasından önce zaman meselesi. Açısal 2, Açısal 1 ile uyumlu olmayacağından ve çok fazla değişiklik olduğundan, soru, Açısal 1.x ile gelişmeye devam etmek veya Açısal 2 geliştirmeye başlamak daha mı iyi?

Her zaman en son sürümü veya piyasadaki en yeni dili kullanmak zorunda olmadığımız bir gerçektir, ancak bu durumda uygulama hala küçüktür, bu yüzden sorunsuz bir şekilde değişebilirim.


1
İlk olarak açısal 1 ile denerdim. Çözümlerin tonları ve birçok soruya birçok cevap var. Muhtemelen açısal 1.5, 2'ye bir köprü olacaktır. Açısal 2 yine de açısal 1'e biraz benzeyecektir, bu yüzden 1'i denemeliyim, çünkü 2'nin üretime hazır olacağı belirli bir tarih yoktur.
ssuperczynski



80
StackOverflow, Quora için bir boşluk bıraktı. Görüş tabanlı ya da iyi bir uyum olmayan tüm bu sorular şimdi Quora ve arama motorunda stackoverflow daha yüksek görünmektedir. Utanç: Teknolojinin böyle bir derinliğe ve genişliğe sahip olduğu SO hakkında böyle bir soru soran yanlış bir şey görmüyorum. Hepimiz her gün bu tür sorularla mücadele ediyoruz, birini diğerinden alıyoruz. gerçek soru sorulmasına ve cevaplanmasına izin verelim.
Priyank

Herhangi bir 1.x sürümü için AngularJS, herhangi bir 2+ sürümü için AngularJS adını kullanın. Angular ve AngularJS için Marka Bilinci Oluşturma Yönergeleri'ne bakın .
georgeawg

Yanıtlar:


157

Bana seni tahmin ediyorum ve bu okuyacağız herkes zaten rahatça açısal 1 ile, diyerek Önsöz ( şimdi olarak anılacaktır angularjs basitçe aksine, Eğik yeni sürümler için). Bununla birlikte, Angular 2 + 'daki bazı eklemelere ve önemli farklılıklara girelim.

  1. Açısal eklediler cli.

Çalıştırarak yeni bir proje başlatabilirsiniz ng new [app name]. Daha ng serve fazla bilgi edinmek için projenize hizmet verebilirsiniz : https://github.com/angular/angular-cli

  1. Açısal kodunuz ES6 Typescript ile yazılmıştır ve çalışma zamanında tarayıcıdaki Javascript ile derlenir.

Bu konuda tam bir kavrayış elde etmek için cevabımın altındaki bazı kaynak listesine göz atmanızı tavsiye ederim.

  1. Proje Yapısı

Temel bir yapıda, işinizi en fazla yapacağınız bir app/tsklasörünüz olacak ve bir uzantı içeren klasör dosyalarında app/jsbulacaksınız . Tarayıcınız yerel yazıyı okuyamadığından, ".ts" dosyalarınızı hata ayıklamak üzere tarayıcınızla "eşleştirir". app/js.js.map

Güncelleme : Beta dışı. Proje yapısı biraz değişti, çoğu durumda ve açısal cli kullanıyorsanız, src/app/klasörde çalışacaksınız . Bir başlangıç ​​projesinde aşağıdakilere sahip olacaksınız.

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

app.component.css : CSS dosyasına özgü kullanmanız gerekircomponent.html

app.component.html : Bir görünüm (app.component.js'de bildirilen değişken)

app.component.spec.ts : test için kullanılırapp.component.ts

app.component.ts : Bağlanan kodunuzapp.component.html

app.module.ts : Bu, uygulamanızı başlatan ve tüm eklentileri, bileşenleri, hizmetleri, vb tanımladığınız budur. Bu app.jsAçısal 1

Proje dosyalarını tanımlamak veya vermek için kullanılan index.ts

Ek bilgi:
Profesyonel ipucu: ng generate [option] [name]yeni hizmetler, bileşenler, borular vb. Oluşturmak için çalışabilirsiniz .

Ayrıca, tsconfig.jsonprojeniz için TS derleme kurallarını tanımladığı için dosya önemlidir.

Tamamen yeni bir dil öğrenmek zorunda olduğumu düşünüyorsan ? ... Ah ... tür, TypeScript JavaScript'in bir üst kümesidir. Gözünüzü korkutmayın; gelişiminizi kolaylaştırmak için orada. Sadece birkaç saat sonra onunla iyi bir kavrayış vardı ve 3 gün sonra hepsini vardı gibi hissettim.

  1. HTML'nize, Açısal 1 yönergesinde olduğu gibi benzer şekilde bağlanırsınız. Çok değişken $scopeve $rootScopekullanımdan kaldırıldı.

Bunu ima etmiş olabilirsiniz. Açısal 2 hala bir MV * 'dir ancak kodu şablonlarınıza bağlamak için ' bileşenler'i kullanacaksınız, örneğin aşağıdakileri yapın

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

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

    export class AppComponent {}

Bu importifadeyi bir v1 denetleyicisindeki bağımlılık enjeksiyonunuz olarak düşünün . Sen kullanmak importiçin içe nerede paketinizi import {Component}bir yapım olacak diyor componentaşağıdaki konularda bağlamak istiyorum HTML.

@ComponentBir selectorve sahip dekoratör dikkat edin template. İşte düşünmek selectorsizin bizim gibi $scopesiz v1 kullanmak gibi kullandığınız bu directivesismi nerede selectorsen şöyle HTML'nize bağlama için kullandığınız

<my-app> </my-app>

<my-app>Şablonunuzda bildirilenler için yer tutucu görevi görecek, kullanacağınız özel etiketinizin adı nerede . ie) <h1> Hello World! </h1>. Oysa bu v1'de aşağıdaki gibi görünecektir:

HTML

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

JS

$scope.hello = "Hello World!"

Ayrıca, aşağıdaki gibi bir yükleme mesajı oluşturmak için bu etiketler arasına bir şey ekleyebilirsiniz:

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

Ardından yükleme mesajı olarak " Yükleniyor ... " mesajı görüntülenir.

Bildirilenlerin , etiketinizde templatekullanacağınız yol veya ham HTML olduğunu HTMLunutmayın selector.


Açısal 1'in daha eksiksiz bir uygulaması daha çok şöyle görünecektir:

HTML

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

V1'de bu şöyle görünecektir

JS

angular.module('controller', [])



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

V2 ile ilgili gerçekten sevdiğim şey bu. Direktifin v1'de benim için dik bir öğrenme eğrisi olduğunu buldum ve anladım bile, sık sık istediğim gibi CSSdeğil. Bunun daha basit olduğunu düşünüyorum.

V2, uygulamanızın daha kolay ölçeklenebilirliğine izin verir, çünkü uygulamanızı v1'de olduğundan daha kolay bölebilirsiniz. Açısal v1'de birkaç tane yerine tüm çalışma parçalarınızı tek bir dosyada tutabileceğiniz için bu yaklaşımı seviyorum.

Projenizi v1'den v2'ye dönüştürmeye ne dersiniz?


Eğer v1 projenizi v2'ye güncellemek isterseniz geliştirme ekibinden duyduğumdan, kullanımdan kaldırılmış blokları silip silip $scopes ile değiştireceksiniz selector. Bu videoyu faydalı buldum. Bazı iyonik ekibin açısal ekibi ile yan yana çalışan bazı v2 ile mobil https://youtu.be/OZg4M_nWuIk Umarım bu yardımcı olur.

GÜNCELLEME: Angular 2'nin resmi uygulamaları ortaya çıktıkça örnekler ekleyerek güncelledim.

GÜNCELLEME 2: Bu hala popüler bir soru gibi görünüyor, bu yüzden açısal 2 ile çalışmaya başladığımda çok yararlı bulduğum bazı kaynakları düşündüm.

Yardımcı Kaynaklar:

ES6 hakkında daha fazla bilgi için Yeni Boston'un ECMAScript 6 / ES6 Yeni Özellikler Eğiticilerine göz atmanızı öneririm - YouTube Oynatma Listesi

Typcript fonksiyonları yazmak ve Javascript için nasıl derlendiğini görmek için Typcript dilini kontrol edin

Eğik 1 denklik içinde ne işlevi parçalanmasıyla bir işlev görmek için Açısal 2 bkz Cookbook -A1 A2 Hızlı Başvuru - Angular.io


Açısal 1 ve 2'yi aynı uygulamada korursam, Açısal 2'nin etkinleştirildiği sayfaların sayfa oluşturmada 5 kat performans artışı olur mu?
Sampath

1
@Sampath Tüm uygulamaların% 99'unda belirgin bir performans değişikliği olduğundan şüpheliyim. AFAIK, A2'nin arkasındaki kavramlar A1'in arkasındakiyle aynıdır, sadece sözdizimi biraz değişmiştir.
Hubert Grzeskowiak

Bu kısa ve özlü bir karşılaştırmadır. Hızlı bir referans olarak yer işareti koyacağım. artı benden bir tane
Fouad Boukredine

39

Açısal 1 ile Açısal 2 karşılaştırmasını anlamanıza yardımcı olabilir.

Açısal 2, Açısal 1'e göre çok sayıda faydaya sahip olduğunu kanıtladı:

  • Tamamen bileşen tabanlıdır.
  • Daha iyi değişiklik tespiti
  • Öncesinde Zaman derlemesi (AOT) oluşturma hızını artırır.
  • TypeScript öncelikle Angular 2 uygulamaları geliştirmek için kullanılır.
  • Açısal 2, Açısal 1'e göre daha iyi performansa sahiptir.
  • Açısal 2, Açısal 1'den daha güçlü bir şablonlama sistemine sahiptir.
  • Angular 2, daha basit API'lara, tembel yüklemeye, daha kolay hata ayıklamaya sahiptir.
  • Açısal 2, Açısal 1'den çok daha test edilebilir.
  • Açısal 2, iç içe geçmiş bileşenler sağlar.
  • Açısal 2, ikiden fazla sistemi birlikte yürütmek için bir yol sağlar.
  • Ve bunun gibi...

1
Performansla ilgili olarak, karşılaştırma için testler var mı? Ayrıca, performans hangi SPA'da 1. sırada? Yuvalanmış bileşenler A1'de de mevcuttur. Son noktada ne demek istediğiniz hakkında hiçbir fikriniz yok, ancak AFAIK bir sayfada birden fazla ng uygulamanız olabilir
Hubert Grzeskowiak

1
Açısal 2, Açısal 1'den daha iyi bir performansa sahiptir. Bu tamamen yanlıştır, ilgili bazı ölçütlerle kanıtlayın;)
amdev

2
Bize bunun nasıl yanlış olduğunu söyle? :) ve cevap Açısal 1. Performans sorunları için burada quirksmode.org/blog/archives/2015/01/the_problem_wit.html
Anıl Singh

16

Açısal 2 ve Açısal 1 temelde aynı ada sahip farklı bir çerçevedir.

açısal 2, web standartlarının mevcut durumu ve web'in gelecekteki durumu için daha hazırdır (ES6 \ 7, bağdaşmazlık, bileşenler, gölge DOM, servis çalışanları, mobil uyumluluk, modüller, daktilo vb.)

açısal 2, açısal 1 gibi birçok ana özelliği öldürdü - kontrolörler, $ kapsam, direktifler (@ bileşen açıklamaları ile değiştirildi), modül tanımı ve çok daha fazlası, ng-repeat gibi basit şeyler bile aynı kalmadı.

herhangi bir şekilde, değişiklik iyidir, açısal 1.x kusurları vardı ve açısal 2 gelecekteki web gereksinimleri için daha hazır.

bir şeyleri özetlemek için - şimdi bir açısal 1.x projesine başlamanızı önermiyorum - bu muhtemelen daha sonra açısal 2'ye geçmek zorunda kalacağınız için en kötü zamandır, açısal seçmektense açısal hakkında fikriniz var 2, google zaten açısal 2 ile bir proje başlattı ve projeyi bitirdiğinizde açısal 2 zaten spot ışığında olmalı. bir şey stabler istiyorsanız, JS çerçeve ve tepki ve akı ve redux düşünebilirsiniz.

açısal 2 harika olacak, bu hiç şüphesiz.


8

Hiçbir çerçeve mükemmel değildir. Açısal 1'deki kusurları burada ve burada okuyabilirsiniz . Ancak bu kötü olduğu anlamına gelmez. Soru, hangi sorunu çözdüğünüzdür. Sınırlı veri bağlama kullanımı ile hafif, basit bir uygulamayı hızlı bir şekilde sunmak istiyorsanız, Açısal 1 ile devam edin. Açısal 1, oldukça iyi olan hızlı prototiplemeyi çözmek için 6 yıl önce inşa edildi. Kullanım durumunuz karmaşık olsa bile, Açısal 1'i kullanabilirsiniz, ancak daha sonra karmaşık bir web uygulaması oluşturma konusunda nüansların ve en iyi uygulamaların farkında olmalısınız. Eğer öğrenme amaçlı bir uygulama geliştiriyorsanız, Angular 2'nin geleceği Angular 2'ye taşınmanızı öneririm.


5

Angular v2 ve ReactJ'lerde öne çıkan bir özellik, her ikisinin de yeni Web Bileşenleri geliştirme mimarisini benimsemiş olmasıdır. Bunun anlamı, artık bağımsız Web Bileşenleri oluşturabilir ve bunları bu Web Bileşeniyle aynı teknoloji yığınına sahip dünyanın herhangi bir web sitesine takıp oynayabiliriz. Güzel! evet çok havalı. :)

Angular v2'deki diğer en önemli değişiklik, birincil geliştirme dilinin TypeScript'ten başka bir şey olmamasıdır. TypeScript Microsoft'a ait olmasına rağmen ve 2015'in (veya ECMAScript6 / ES6) JavaScript'in bir üst kümesidir, ancak çok umut verici bazı özelliklere sahiptir. Bu öğretici okuduktan sonra okuyucuların TypeScript'i biraz ayrıntılı olarak (elbette eğlenceli) kontrol etmelerini öneriyorum.

Burada Açısal v1 ve Açısal v2'yi birbiriyle ilişkilendirmeye çalışanların okuyucuları daha fazla karıştırdıklarını ve mütevazi görüşüme göre Açısal v1 ve Açısal v2'nin iki farklı çerçeve olarak ele alınması gerektiğini söyleyebilirim. Angular v2'de, Web Bileşenleri'nin web uygulamaları geliştirme konseptine sahipken, Angular v1'de Kontrolörler ile oynamak zorundayız ve (ne yazık ki veya neyse ki) Angular v2'de hiçbir kontrolör mevcut değildir.


3
Bileşenler 1.5 sürümünden bu yana Angular 1'de de mevcuttur. Ama gerçekten, bu daha önce eleman direktifleriyle de mümkün oldu.
Hubert Grzeskowiak

Bunun doğru olduğunu düşünmüyorum - Hem açısal hem de React bileşen mimarisine sahip, ancak w3c standardı olan Web bileşenleri mimarisine sahip değil.
Nitin Jadhav

3

Dikkat edilmesi gereken bir nokta, açısal2'nin daktilo yazısı kullanmaktır.

Stajyerimde cordova ile angular1 yaptım ve şimdi açısal 2 yapıyorum. Bence angular2, bence daha yapılandırılmış bir trend olacak, ancak eksileri, sorun veya zorluklarınız olduğunda başvurabileceğiniz çok az kaynak olması. açısal 1.x, kullanımı çok kolay olabilecek tonlarca kişiselleştirilmiş direktiflere sahiptir.

Umarım yardımcı olur.


Teşekkürler. Direktifler Açısal 1.x'teki performans için en kötü olanlardır. Çok dikkatli olmalısın ya da onlardan kaçınmalısın
emmanuel sio

1

Açısal 2 1'den çok daha iyidir, en azından sunduğu şeylerde: web bileşenleri için destek, daktilo, performans ve arayüzün genel basitliğini kullanarak, açısal 2 kullanarak bir proje başlatmaya karar vermemin nedeni buydu. , Açısal 2'de (örn. Apache ile yönlendirme) çok az veya hiç belge bulunmayan sorunlar olduğunu fark ettim, bu nedenle açısal 2'nin dokümantasyonu ve topluluğu, yeterince gelişmediği için açısal 2 için en büyük tuzaktır.

Kısa bir süre için bir siteyi hızlı bir şekilde yükseltmeniz gerekiyorsa, iyi bilinen açısal 1'i kullanın, daha uzun bir projedeyseniz ve yeni sorunları araştırmak için zaman ayırabiliyorsa (karşılaşacak ilk kişi olabilirsiniz) , eğer katkıyı düşünüyorsanız, açısal 2 topluluğuna verebilirsiniz).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.