Advancing from jQuery to AngularJS

Advancing from jQuery to AngularJS

Technology trends are increasingly growing today with the developers building robust  and more complex applications. Almost all of the rich web applications that we currently see on the web rely on a subtle set of UI controls, libraries and frameworks. There are so many options out there to provide a consistent, reliable, and highly interactive user interface, but selecting the right library or  a framework can be overwhelming. To have an idea of all the possible alternatives, in this article we will explore what constitutes best practices with regard to jQuery and, furthermore, why angular is a good choice of a framework to implement.

jQuery as we all know it has become an essential library when it comes to common functions and adding JavaScript functionality to a website. But when it comes to some of the web applications that are large and complex, jQuery alone cannot be used to provide a stable foundation to write quality, maintainable code. Consequently, MVC frameworks have emerged to provide more structured  and maintainable code when developing these applications.

There are many JavaScript frameworks, which provide a solid structure for your code whilst also offering some extra functionality to turn up the desired task quickly. To name a few- Angular.js, Backbone.js, EmberJS, KnockoutJS, etc.   all these frameworks have their own perspectives based on the functionality, features, size, dependencies and interoperability.  Based on the statistical reports of, it is found that AngularJS has been the preferable framework in most of the cases. Also Angular has jQuery dependency, which makes it a good choice for web development. Angular provides a ready framework that works with multiple libraries which can be added on as required.

Let say, if you would like to send some requests to a backend server and display the results on a web page and vice versa. We can perform this simply in both Angular and jQuery. But with Angular it goes really well against jQuery with one big difference. It does not involve us to think of the back and forth DOM translations as opulent to jQuery. In jQuery, the view and the logic or behavior which affects those elements is left to the developer to split them. In jQuery, if we wish to update a specific DOM element with backend data it has to be coded. There is no separation as to which is the data and which is the controller of the data.

That’s where AngularJS comes into play with its two way data binding. Angular separates the UI data and the UI representation of data. The code in AngularJS  is the translation of data to the DOM and vice versa. Angular makes this binding ideal, while increasing productivity. This is the best way to separate data and the HTML view code.

Angular provides rich ‘desktop like’ applications and features that you don’t get with using a jQuery library.

  • MVW pattern (similar to MVC)
  • Two way data binding
  • Dependency Injection:
  • Templates
  • Form Validations
  • Deep Linking for dynamic pages
  • Communication with server
  • Reusable components and localization to name a few

When looking for a comprehensive all-in-one solution, AngularJS is the right choice between the two. Its two-way data binding, in-built directives and filters allows developers to build applications very rapidly. So if you are looking for a lightweight and modular front-end framework for developing fast and powerful web interfaces, AngularJS is the apt framework to build complex applications.  I hope this post has made you think about Angular.js as being a more than viable replacement to jQuery.

Solution to “Error: $digest already in progress” in AngularJS

Solution to “Error: $digest already in progress” in AngularJS

Solution to “Error $digest already in progress” in AngularJS

AngularJS is a popular framework that has obtained significant traction in providing rich web applications. Although AngularJS provides many performance enhancements built in, it leads developers run into many common problems when coding is done improperly. Therefore, in this article, we’ll look at some performance pointers that you can use in your AngularJs applications that will help you to build error free applications.

Let’s now look at the highlighted error ” $digest already in progress”. Generally while working on an AngularJS code in a web page, it is common practise to update and modify the scope when changing something of it from a directive or a controller. Sometimes the updated changes may not be reflected on the front-end in the manner which you expect and intern you’ll get an error thrown from Angular saying ” $digest already in progress” as soon as the dialog was loaded.

Let’s walk through with some underlying easy performance considerations for Angular that help us bring down this error and understand the $digest cycle a bit better. In the process of loading the program, Angular runs the event loop called a $digest cycle. When we create data-bindings with AngularJS, we’re creating more $$watchers and $scope Objects, which in turn will take longer to process on $digest. The drawback here is that this updating process takes some time to be done . To side step this problem, we can invoke the digest cycle of AngularJS implicitly by using $scope.$apply() with the $timeout() function. This let’s Angular update itself with new values and will implicitly calls $apply() after a delay. When $scope.$apply() is called, it boosts the entire application into the $digest loop and in turn runs $rootScope.$digest(). This cycle processes all of the watchers of the $scope it was called from.

Apart from this you have other option to resolve this type of issue by placing it in logic that explicitly checks the AngularJS $$phase. Here’s some code example usage to demonstrate the concept:

if(!$scope.$$phase) {

//$digest or $apply



This $scope.$$phase will return “$digest” or “$apply” if a $digest or $apply is in progress. Hope this article might help AngularJS developers with a common pitfall. In AngularJS all the small errors we encounter have much simpler and elegant solutions. Try to understand the scope and use the best practices mentioned above when you write AngularJs apps code. In short, invoking the digest cycle of AngularJS implicitly by using $scope.$apply() will perform all expressions in templates and watchers.