The components in angular 1.5 are a special kind of directive with a bit more restrictions and a simpler configuration. The main differences between directives and components are:
- Components are restricted to elements. You can’t write a component as an attribute.
- Components always have an isolated scope. This enforces a clearer dataflow. No longer will we have code that will change data on shared scopes.
- No more link functions, but only a well-defined API on the controller.
- A component is defined by an object and no longer by a function call.
Well-defined Lifecycle
Components have a well-defined lifecycle:- $onInit: This callback is called on each controller after all controllers for the element are constructed and their bindings initialized. In this callback you are also sure that all the controllers you require on are initialized and can be used. (since angular 1.5.0)
- $onChanges: This callback is called each time the one-way bindings are updated. The callback provides an object containing the changed bindings with their current- and previous value. Initially this callback is called before the $onInit with the original values of the bindings at initialization time. This is why this is the ideal place for cloning your objects passed through the bindings to ensure modifications will only affect the inner state.
Please be aware that the changes callback on the one-way bindings for objects will only be triggered if the object reference changes. If a property inside the object changes, the changes callback won’t be called. This avoids adding a watch to monitor the changes made on the parent scope (works correctly since angular 1.5.5)
- $postLink: This is called once all child elements are linked. This is similar to the (post) link function inside directives. Setting up DOM handlers or direct DOM manipulation can be done here. (since angular 1.5.3)
- $onDestroy: This is the equivalent of the $destroy event emitted by the scope of a directive/controller. The ideal place to clean up external references and avoid memory leaks. (since angular 1.5.3)
Well-defined structure
Components also have a clean structure. They exist out of 3 parts:- A view, this can be a template or an external file.
- A controller which describes the behaviour of the component.
- Bindings, the in- and outputs of the component. The inputs will receive the data from a parent component and by using callbacks, will inform the parent component of any changes made to the component.
Bindings
Because components should only be allowed to modify their internal state and should never modify any data directly outside its component and scope. We should no longer make use of the commonly used two-way binding (bindings: { twoWay: “=” } ). Instead since angular 1.5 we now have a one-way binding for expressions (bindings: { oneWay: “<” } ).The main difference with the two-way binding is the fact that the bound properties won’t be watched inside the component. So if you assign a new value to the property, it won’t affect the object on the parent. But be careful, this doesn’t apply on the fields of the property, that is why you always should clone the objects passed through the bindings if you want to change them. A good way to do this is working with named bindings, this way you can reuse the name of the bound property inside the component without affecting the object in the parent scope.
1: module.component("component",{
2: template: "<div>{{$ctrl.item}}</div>"
3: bindings: {
4: inputItem: "<item"
5: }
6: controller: function(){
7: var $ctrl = this;
8: this.$onChanges = function(changeObj){
9: if(changeObj.inputItem){
10: this.item =
11: angular.clone(changeObj.inputItem.currentValue);
12: }
13: }
14: }
15: });
For exposing the changes inside the component we can only make use of the “&” binding. Calling a callback in the parent scope is the only way that we can and should pass data to the parent scope/component.
Let’s rephrase a little:
- “=” binding (two-way) should no longer be used to avoid unwanted changes on the parent’s scope.
- “<” binding (one-way) should be used to retrieve data from the parent scope passed as an expression.
- “@” binding (string) should be used to retrieve string values from the parent scope.
- “&” binding (callback) can be used to either retrieve data from the parent scope or be used as the only way to pass data to the parent scope.
Summary
The components way of working in angular 1.5 closes the gap for migrating your code to an angular 2 application a bit more. By building your apps in the angular 2 style you are already thinking on the same level. This will ease the migration path by shifting away from the controller way of working.Directives will still have an existence beside the components. You will still have some cases where you will want to use attributes instead of elements or have the need of a shared scope for the UI state. But in most cases components will do the trick.
ReplyDeleteWonderful bloggers like yourself who would positively reply encouraged me to be more open and engaging in commenting. So know it's helpful..
Veritas Volume Manager Training in Chennai
Great and useful article. Creating content regularly is very tough. Your points are motivated me to move on.
ReplyDeleteSEO Company in Chennai
Great article. Happy to visit your blog. Thanks for sharing.
ReplyDeleteweb design institute in chennai
i'm really happy to visit your blog.really interesting.thank you for sharing this blog.
ReplyDeleteBigData Analytics Training
Pretty article! I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing.
ReplyDeleteRegards,
Core JAVA Training in Chennai | JAVA Training in Chennai
The blog gave me idea about Components in angular 1.5.x Thanks for sharing it
ReplyDeleteHadoop Training in Chennai
Thanks for sharing this informative content which provided me the required information about the latest technology.
ReplyDeleteSoftware Testing Training Institute in Chennai | Software Testing Training in Chennai | Online Training Institute in Chennai
That looks really helpful. I would like to get more ideas on the topic. It would be helpful if you'll share some educated sources here.
ReplyDeleteThank you for sharing those thought. I think that I could use your decision in my own work. Thank you!
ReplyDeleteNice article..Its really interesting to read your blog..Thanks for sharing such a wonderful Blog..
ReplyDeleteC & C++ Training Institute in Chennai | C & C++ Training in Chennai | N0.1 C & C++ Training Center in Chennai | Online Training in Velachery
Nice and good article.. it is very useful for me to learn and understand easily.. thanks for sharing your valuable information and time.. please keep updating.
ReplyDeleteAndroid Training in chennai | IOS Training in chennai
Hi, i really enjoyed to read your article.. i got clear idea through your views and ideas.. thanks for sharing your post..
ReplyDeleteJava Training in chennai
Software Testing Training in chennai
Good Post, Thanks for sharing your views and creative ideas.
ReplyDeleteCCNA Training Institute in Chennai | CCNP Training Institute in Chennai | No.1 CCNA Training in Chennai | Best CCNP Training in Chennai
Excellent blog with nice content... really useful information.
ReplyDeleteNo.1 Software Testing Training Institute in Chennai | Best Selenium Training Institute in Chennai
Pretty and nice article, thanks for sharing your views and ideas.. it helps me lot to learn my technical skills..
ReplyDeleteEmbedded Project Center in Chennai | Embedded Project Center in Velachery
Excellent post. Keep updating.I have got some useful information form this article.
ReplyDeleteBest Real Time Project Center in Chennai | Real Time Project Center in Velachery
Thank you so much for sharing this great blog.Very inspiring and helpful too.
ReplyDeleteAngularJS Training in Chennai
Best AngularJS Training in Chennai
Hi, your way of presentation was really nice..Thanks for sharing valuable information..
ReplyDeleteWeb Designing Training Institute in Chennai | Java Script Training in Chennai| HTML & CSS Training in Velachery
Great article. If you want to learn more on Angular's latest version, Angular 2/4/5 - do visit this web link: Angular Training in Chennai
ReplyDeleteLike that components! Your blog is like professional! Do you want to find best premium wordpress templates for any kind of business? go here https://wordpresstemplates.ch/
ReplyDeleteThanks much for creating and sharing this wonderful article, like to read this regularly to get more updates...
ReplyDeleteBest Online Software Training Institute | Angular 5 Training
Thanks much for creating and sharing this wonderful article,
ReplyDeleteBest Java Training in Chennai | JEE Training in Chennai | Best Java Training Institute in Chennai
ReplyDeleteThat is very interesting; you are a very skilled blogger. I have shared your website in my social networks! A very nice guide. I will definitely follow these tips. Thank you for sharing such detailed article.
Angularjs course in chennai
Great Blog... The information you shared is very effective for learners I have got some important suggestions from it, Keep Sharing such a nice blog.
ReplyDeleteBest RPA Training Institute in Chennai | Best RPA Training Institute in Velachery
I read this article. I think You put a lot of effort to create this article. I appreciate your work.
ReplyDeleteSelenium Training Institute in Chennai | Selenium Training Institute in Velachery