Categories: JavascriptUI

AngularJS – How to Create & Use Custom Service

This article demonstrates how one could create custom services in AngularJS and use them within controllers or other services using dependency injection. In this article, the service demonstrated is Calculator service with just one API named as “calculate”. The API takes two numbers and operation type and calculate the result appropriately. The demo could be found on this page, http://hello-angularjs.appspot.com/angularjs-create-custom-services

Following are three key steps in creating using custom services:

  1. Create the code for service (take a look at example below showing Calculator class with a constructor, Calculator()
  2. Register the recipe or method to inject the service. Injector service uses this to inject the service
  3. Inject the new custom service in the Controller or in other services

 

Step 1: Create/Define the Service

The code below represents how to create a custom service. The Calculator class is defined with a constructor and an API namely, calculate. Other methods such as add, subtract etc are private methods of this class. The method “calculate” is invoked on the “calculator” service object that is injected into the controller component (Look at step 3).

function Calculator() {

 this.calculate = function( no1, no2, optype ) {
   var result = 0;
   switch( optype ) {
     case '+':
       result = add( no1, no2);
       break;
     case '-':
       result = subtract( no1, no2);
       break;
     case '*':
       result = multiply(  no1, no2);
       break;
     case '/':
       result = divide(  no1, no2);
       break;
     default:
   }
   return result;
 }
 var add = function( no1, no2 ) {
   return no1 + no2;
 }
 var subtract = function( no1, no2 ) {
   return no1 - no2;
 }
 var multiply = function( no1, no2 ) {
   return no1 * no2;
 }
 var divide = function( no1, no2 ) {
   return no1 / no2;
 }

}

 

Step 2: Defining Factory Method for Injecting Calculator Service

In following code, the Calculator service is created using factory method. The injector service invokes the factory method on the app, (calcApp), and obtains an instance of Calculator service. The “factory” method constructs a new service using a function with zero (as shown below) or more arguments (dependencies on other services). The return value of this function is the service instance.

It has been found many a times, that one tries and inject $scope object in function() such as function($scope) with the thought that the parameters of $scope object could be used within the service by reference. However, Angular throws error with that. With factory method, only services can be injected. And, $scope object can not be considered as service. The best practice is to pass the parameters in the method as shown in the API, calculate.

calcApp.factory('calculator', function() {
      return new Calculator();
    });

There are other ways of creating a service, the details of which could be found on this page (https://docs.angularjs.org/guide/providers).

 

Step 3: Injecting Calculator Service and Invoking the Method

Following code represents how one could inject a custom service. In the code below, “calculator” service is injected by Angular injector service. Also, pay attention to the method invocation, calculator.calculate.

var calcApp = angular.module( "calcApp", [] );
calcApp.controller( "CalculatorCtrl", [ '$scope','calculator', function($scope, calculator ) {

$scope.types = [
  { name : 'Add', value : '+' },
  { name : 'Subtract', value : '-' },
  { name : 'Multiply', value : '*' },
  { name : 'Divide', value : '/' },
  ];
 $scope.type = $scope.types[0];

 $scope.calculate = function() {
     $scope.result = calculator.calculate( $scope.no1, $scope.no2, $scope.type.value );
 }

}]);

[adsenseyu1]

Ajitesh Kumar

I have been recently working in the area of Data analytics including Data Science and Machine Learning / Deep Learning. I am also passionate about different technologies including programming languages such as Java/JEE, Javascript, Python, R, Julia, etc, and technologies such as Blockchain, mobile computing, cloud-native technologies, application security, cloud computing platforms, big data, etc. For latest updates and blogs, follow us on Twitter. I would love to connect with you on Linkedin. Check out my latest book titled as First Principles Thinking: Building winning products using first principles thinking. Check out my other blog, Revive-n-Thrive.com

Share
Published by
Ajitesh Kumar
Tags: angularjs

Recent Posts

Autoencoder vs Variational Autoencoder (VAE): Differences

Last updated: 08th May, 2024 In the world of generative AI models, autoencoders (AE) and…

14 hours ago

Linear Regression T-test: Formula, Example

Last updated: 7th May, 2024 Linear regression is a popular statistical method used to model…

1 day ago

Feature Engineering in Machine Learning: Python Examples

Last updated: 3rd May, 2024 Have you ever wondered why some machine learning models perform…

6 days ago

Feature Selection vs Feature Extraction: Machine Learning

Last updated: 2nd May, 2024 The success of machine learning models often depends on the…

6 days ago

Model Selection by Evaluating Bias & Variance: Example

When working on a machine learning project, one of the key challenges faced by data…

7 days ago

Bias-Variance Trade-off in Machine Learning: Examples

Last updated: 1st May, 2024 The bias-variance trade-off is a fundamental concept in machine learning…

1 week ago