Dom nesnesi içerisindeki herhangi bir html elementini component class'ı üzerinde refere edebilmek için viewchild komponentini kullanırız.
HTML Elementini Refere Etmek
Componenti Refere Etmek
Dom nesnesi içerisindeki herhangi bir html elementini component class'ı üzerinde refere edebilmek için viewchild komponentini kullanırız.
HTML Elementini Refere Etmek
Componenti Refere Etmek
Componentler arasında veri aktarmak istediğimiz de @input ve @output decoratorleri kullanılır.
Componentler arası veri değilde html öğeleri içeren kodlar paylaşmak istediğimizde burada devreye ng-content girmektedir. ng-content, html içeriklerini parent componentten child component'e geçirmemizi ve render etmemizi sağlar.
Child component içerisinde ng-component selector'ı ile işaretlediğimiz kısma parentten gönderilen html öğesi basılacaktır.
Multiple ng-content
Routing: Bir componentten (sayfadan) diğer componenete geçiş yapabilmek için Angular Router Modulünden faydalanırız.
İstek yapılan URL ile eşleşen sayfaya biryandan da ekstradan URL üzerinden veri taşıyabilmemizi sağlayan yapıdır.Aşağıda solda tüm productlar gelirken sağ tarafta sadece URL üzerindeki 2 değerine karşılık product'ı elde edip listeleyebiliyoruz.
ng g s services/product
Yöntem 1 Modul Bazında Tanımlama
1- Service Tanımlama
2 - Tanımlanan serviceyi IOC'a ekleme. Uygulamanın herhangi bir noktasından artık ProductServiceye erişilebilir.
3 - Herhangi bir Componenet içerisinde tanımlanan servisi kullanma
Yöntem 2 Injectable ile Uygulama Bazında Tanımla
Yöntem 3 Componenet Bazında Tanımlama. Servis sınıfına sadece ilgili component erişebilir.
Component class'ında formun yapısının nesnel olarak tanımlandığı form yapısıdır. Yani form yapısında kullanılan FormGroup, FormArray ve FormControl gibi tüm nesneleri kendimizin oluşturduğu ve formu konfigüre ettiği bir form yapılanmasıdır. Ekstra olarak formun validasyonel kurallarını ve yapılandırmalarını da bu nesne üzerinden tanımlayabiliyoruz.
FormGroup : Formun kurulmasını sağlayan temel directive'dir. Form elemanlarının component classındaki model ile senkronize olmasını sağlar. Bunun için parametre olarak component class'ında tanımlanmış olan From Group nesnesini alarak çalışma sergiler
FormControlName : FormGroup nesnesi içerisindeki herhangi bir FormControl'ü form elemanlarından birine bağlamak ve senkronizasyonu sağlamak için kullanılan directive'dir. ilgili FormControl nesnesine bağlanan form elemanının değeri değiştikçe ilgili nesnenin de otomatik olarak güncellenecektir.
1- ReactiveFormsModule isimli modulu ilgili module import emeliyiz.
2- Oluşturulacak formun öncelikle Modelini oluşturunuz ve gerekli FormController'i tanımlayınız. Bunun için FormBuilder nesnesinden istifade edebiliriz.
FormGrupName
Bir modelin alt modeli şeklinde bir tanımlamaya ihtiyaç varsa.
Angular Component Communication, Angular componentleri arasında veri ve olayları paylaşma süreçlerini ifade eden bir kavramdır. Bir sayfayı component olarak tasarlayıp daha sonra bu componentin de alt bileşenleri olarakta başka componentler tasarlayabiliyoruz. Dolayısıyla bu componentler aralarında iletişim kurma ihtiyacı duyabilirler.
Parent to Child Communication
Cild Component: Herhangi bir compnent içinde selector keyiyle bereber referans edilmiş componentir.
Child to Parent Communication
Child componentten parent component'e veri göndermek için kullanılan yöntemdir.
@output() decoratorü ve EventEmitter sınıfı kullanılır.
HTML elemanlarına ekstra özellikler ve davranışlar eklemek için kullanılan özel etiketlerdir.
Built-in / Ön Tanımlı Directiveler
*ngFor - Arraylerle beraber kullanılır ve arrayde kaç tane eleman varsa o kadar işlem gerçekleştiriyor. Html nesneleri üzerinde iterasyonel işlemler yapmak için kullanılır. Ayrıca her bir elemanın index değeride aşağıdaki hızlıca elde edilebilir.
Component clasındaki her herhangi bir field yada property değerini {{}} operatoru html de bir alana basmaktır. Bu interpolation one-way data binding gerçekleştirmektedir. İnterpolation, yapısal olarak sadece field veya property değerlerini okumak ve böylece template'e yansıtmak için kullanılır. Bundan dolayı uygulamanın state(durumunu) değiştirecek herhangi bir işlem gerçekleştirmemektedir.
ng new DenemeProject
Module: Belli bir domaindeki öğeleri kavamsal olarak ayırarak gruplamamızı sağlar. Örneğin bir e-ticaret uygulamamız olsun. Bu e-ticaret uygulamasında productlarla ilgili bir çalışmaya yapıyorsak bu producta ait tüm componenet,directive, service vs. yapıları product module altına koyabiliriz. Böylece domain bazlı ayrım sağlamış oluruz. Bir uygulamada N tane moduler olabilir fakat bu modullerden sadece bir tanesi ana moduldür. AppModule uygylama için ana modüldür.
Modüller birbirlerini import etmedikleri taktirde, bir modüldeki parça diğer modül altındaki parçalar tarafından erişilemez.
Component: ng g c [component_name]
Uygulamanın kullanıcıya gösterilecek sayfa bazında bütün işlemlerin yapıldığı yapıdır.Kullanıcıya gösterilecek sayfanın kendisidir. HTML(prdocut.componenet.html) ve TypeScript(product.component.ts) dosyalarından oluşmaktadır. Bir productpage sayfamız olacaksa işte bu, component olarak tasarlanır. Componentler src/app altında tutulur.
Componenetler, veri modeliyle etkileşim kurabilmek için Data Binding özelliğini kullanmaktadır. product.component.ts içindeki bir veri modelinde değişiklik olduğunda bunun anlık olarak product.component.html dosyasına yansımasına data binding denir. Bunun tam tersi bir durumda olabilir. product.component.html dosyasında değişkenin değerininde bir değişiklik yaptığımızda bununda product.component.ts ye yansımasına da two way data binding diyoruz.
Componentler uygulamanın bussines mantığını içerdikleri için ihtiyaç duydukları servislerin instancelerini dependency injection ile elde edebilirler.
Component içinde başka bir component olabilir.
Data Binding : Veri modeli ile templateler arasında veri akışını dinamik bir şekilde sağlarız. Böylece uygulamalardaki verisel değişiklikler otomatik olarak sayfalara yansıtılabilmektedir. Örneğin product.component.ts dosyası içerisinde bir product değişkenin durumunda bir değişiklik olursa bu product.component.html sayfasına otomatik olarak yansıtır.
Data binding çif tönlü olarak çalışmaktadır. Yani veri modeli güncellendiği zaman template'te, template güncellendiği zaman ise veri modeline anında yansıtılmaktadır.(two way data binding)
Örneğin bir create order formumuz olsun. Bu form üzerinden ilgili alanlar doldurulmaya başladığında otomatik olarak da product.component.ts içerisindeki veri modeli güncellenmektedir.
Decorator: TypeScript dilinin bir özelliğidir. Decorator sayesinde bir class'a yahut her hangi bir class memberına metadata etkeyebilmekteyiz. Böylece ilgilin yapının davranışı hakkında bir öntanımda bulunmuş oluruz.
Misal olarak bir class'ı @Component decorater'ı ile işaretlersek bunun bir component olduğu, Eğer @Injectable ile işaretlersek bir service olacağı anlamına gelmektedir.
Services: Genellikle dış servislerle( API- endpoint) iletişim kurmak, karmaşık iş operasyonlarını veya business logic'i yürütmek yahut componenetler arasında iletişim sağlayabilmek için kullanılan fiili yapılanmalardır.
Guard: Angular uygulamasında route erişimlerinin izin kontrolleri Guard yapılanması üzerinden gerçekleştirilmektedir.Aynı şekilde sayfalar arası geçiş süreçlerinde ilgili kullanıcının erişimine izin verilip verilmeyeceğine dair karar veren yapılanmalardır.
Pipes: Verilerin görüntülenme süreçlerinde işlenmesine yönelik işlevsellik sağlayan yapılarıdr.
Misal olarak bir verinin tarihsel yahut parasal biçime dönüştürülmesi pipelar sayesinde gerçkeleştirilebilir. Maskele yapmamız gerektiği durumlarda da kullanabiliriz.
Data Binding : Veri modeli ile templateler arasında veri akışını dinamik bir şekilde sağlarız. Böylece uygulamalardaki verisel değişiklikler otomatik olarak sayfalara yansıtılabilmektedir. Örneğin product.component.ts dosyası içerisinde bir product değişkenin durumunda bir değişiklik olursa bu product.component.html sayfasına otomatik olarak yansıtır.
Data binding çif tönlü olarak çalışmaktadır. Yani veri modeli güncellendiği zaman template'te, template güncellendiği zaman ise veri modeline anında yansıtılmaktadır.(two way data binding)
Örneğin bir create order formumuz olsun. Bu form üzerinden ilgili alanlar doldurulmaya başladığında otomatik olarak da product.component.ts içerisindeki veri modeli güncellenmektedir.
Binding Çeşitleri
1- Text İnterpolation
Template içerisinde, Component Class'ı içerisinde tanımlı olan bir field/property değerinin yazdırılması için kullanılan Binding yöntemidir. name değeri değiştikçe html içindeki alan değişir.
2- Property Binding
Template içerisindeki HTML nesneleri veya directive'ler için Component Class'ında tanımlı olan verilerin property olarak direkt bağlanmasını sağlayan yöntemdir. propertyler template içerisinde [] (köşeli parantez) içinde belirtilir.
3- Event Binding
3- Two-Way Data Binding -> [(ngModel)]
Template içerisindeki bir HTML nesnesinin değeri değiştiğinde, o nesneyle bind edilmiş olan Component Class'ı içerisindeki fiedl/property değerinin anlık olarak değiştirilmesini ve aynı zamanda tam tersi durumunda geçerli olmasını sağlayan yöntemdir. [(ngModel()] kullanılır. Bu directive'nin kullanılabilmesi uygulamanın ana modulu(app.module.ts) sınıfı içerisinde FormModule eklenmelidir.
örnek kullanım
Bilgisayarmızın sağ alt köşedeki saati 9:24:27 iken uygulamayı ayağa kaldırdığımızda aşağıdaki sonuçlar elde ediliyor.