Introduction to Operations on AngularJS Services
Introduction to Operations on AngularJS Services
The Methods of a Service
Introduction
A property is usually suited for a constant value you want to access in the controller. If you want a functionality that processes and/or validates some values, you should add a method to the service.
Practical Learning: Introducing AngularJS Services
body { background-color: white; } .bold { font-weight: 600; } .ng-model { width: 100px; } .large-text { width: 120px; } .left-column { width: 150px; } .delimiter { margin: auto; width: 700px; } .common-font { font-family: Georgia, Garamond, 'Times New Roman', serif; }
Creating a Method
We already know that JavaScript supports nested functions. If you want to add a method to a service, nest a function in its constructor. To do this, attach a name to the this object and assign a method definition to it. If the method must produce a value that will be accessed in the controller, make sure it returns a value. Here is an example:
function announce() { this.validateUsername = function () { return "The username you are trying to create is not valid (too short or too long). Make sure your new username has 6 to 8 characters"; } }
In the same way, you can create as many methods as you want in the constructor of a service. To call a method of a service in the controller, apply the name of the service to it and make sure you use the parentheses. Here is an example:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Exercise</title> <script src="Scripts/angular.min.js"></script> </head> <body ng-app="appTimeSheet"> <script> var app = angular.module('appTimeSheet', []); app.service('tsService', announce); app.controller("TimeSheetController", present); function announce() { this.validateUsername = function () { return "The username you are trying to create is not valid (too short or too long). Make sure your new username has 6 to 8 characters"; } this.checkPassword = function () { return "The password you have provided doesn't meet our criteria. Make sure you provide at least 2 lowercase letters, 2 uppercase letters, 2 digits, and 2 special characters."; } } function present(tsService) { this.user = tsService.validateUsername(); this.pass = tsService.checkPassword(); } </script> <div ng-controller="TimeSheetController as tsc"> <p><b>Error:</b> {{tsc.user}}</p> <p><b>Warning:</b> {{tsc.pass}}</p> </div> </body> </html>
Of course, you can define the whole constructor in its placeholder of the service. Here is an example:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Kolo Bank</title>
<script src="Scripts/angular.min.js"></script>
</head>
<body ng-app="appTimeSheet">
<script>
var app = angular.module('appTimeSheet', []);
app.service('tsService', function () {
this.validateUsername = function () {
return "The username you are trying to create is not valid (too short or too long). Make sure your new username has 6 to 8 characters";
}
this.checkPassword = function () {
return "The password you have provided doesn't meet our criteria. Make sure you provide at least 2 lowercase letters, 2 uppercase letters, 2 digits, and 2 special characters.";
}
});
app.controller("TimeSheetController", present);
function present(tsService) {
this.user = tsService.validateUsername();
this.pass = tsService.checkPassword();
}
</script>
<div ng-controller="TimeSheetController as tsc">
<p><b>Error:</b> {{tsc.user}}</p>
<p><b>Warning:</b> {{tsc.pass}}</p>
</div>
</body>
</html>
Practical Learning: Adding Functions to a Service
function calculateSalary() { function calculateRegularTime(time) { if (time <= 8.00) return time; else return 8.00; } function calculateOvertime(time) { if (time <= 8.00) return 0.00; else return time - 8.00; } var hSal = 16.29; var overtimeRate = hSal * 1.50; var mon = 10.50, tue = 9.00, wed = 7.50, thu = 9.50, fri = 6.00; var monRegTime = calculateRegularTime(mon); var tueRegTime = calculateRegularTime(tue); var wedRegTime = calculateRegularTime(wed); var thuRegTime = calculateRegularTime(thu); var friRegTime = calculateRegularTime(fri); var monRegSal = hSal * monRegTime; var tueRegSal = hSal * tueRegTime; var wedRegSal = hSal * wedRegTime; var thuRegSal = hSal * thuRegTime; var friRegSal = hSal * friRegTime; var monOver = calculateOvertime(mon); var tueOver = calculateOvertime(tue); var wedOver = calculateOvertime(wed); var thuOver = calculateOvertime(thu); var friOver = calculateOvertime(fri); var monOverPay = overtimeRate * monOver; var tueOverPay = overtimeRate * tueOver; var wedOverPay = overtimeRate * wedOver; var thuOverPay = overtimeRate * thuOver; var friOverPay = overtimeRate * friOver; this.baseRate = hSal; this.monWork = mon; this.tueWork = tue; this.wedWork = wed; this.thuWork = thu; this.friWork = fri; this.monRegularTime = function () { return monRegTime; } this.tueRegularTime = function () { return tueRegTime; } this.wedRegularTime = function () { return wedRegTime; } this.thuRegularTime = function () { return thuRegTime; } this.friRegularTime = function () { return friRegTime; } this.monRegularPay = function () { return monRegSal; } this.tueRegularPay = function () { return tueRegSal; } this.wedRegularPay = function () { return wedRegSal; } this.thuRegularPay = function () { return thuRegSal; } this.friRegularPay = function () { return friRegSal; } this.monOvertime = function () { return monOver; } this.tueOvertime = function () { return tueOver; } this.wedOvertime = function () { return wedOver; } this.thuOvertime = function () { return thuOver; } this.friOvertime = function () { return friOver; } this.monOverPay = function () { return monOverPay; } this.tueOverPay = function () { return tueOverPay; } this.wedOverPay = function () { return wedOverPay; } this.thuOverPay = function () { return thuOverPay; } this.friOverPay = function () { return friOverPay; } this.weeklySalary = monRegSal + tueRegSal + wedRegSal + thuRegSal + friRegSal + monOverPay + tueOverPay + wedOverPay + thuOverPay + friOverPay; } appPayrollApplication.service("timeSheetService", calculateSalary);
var appPayrollApplication = angular.module("appPayroll", []); function processPayroll(timeSheetService) { this.prepare = function () { this.HourlySalary = timeSheetService.baseRate; this.Monday = timeSheetService.monWork; this.Tuesday = timeSheetService.tueWork; this.Wednesday = timeSheetService.wedWork; this.Thursday = timeSheetService.thuWork; this.Friday = timeSheetService.friWork; this.MondayRegularTime = timeSheetService.monRegularTime(); this.TuesdayRegularTime = timeSheetService.tueRegularTime(); this.WednesdayRegularTime = timeSheetService.wedRegularTime(); this.ThursdayRegularTime = timeSheetService.thuRegularTime(); this.FridayRegularTime = timeSheetService.friRegularTime(); this.MondayRegularSalary = timeSheetService.monRegularPay(); this.TuesdayRegularSalary = timeSheetService.tueRegularPay(); this.WednesdayRegularSalary = timeSheetService.wedRegularPay(); this.ThursdayRegularSalary = timeSheetService.thuRegularPay(); this.FridayRegularSalary = timeSheetService.friRegularPay(); this.MondayOvertime = timeSheetService.monOvertime(); this.TuesdayOvertime = timeSheetService.tueOvertime(); this.WednesdayOvertime = timeSheetService.wedOvertime(); this.ThursdayOvertime = timeSheetService.thuOvertime(); this.FridayOvertime = timeSheetService.friOvertime(); this.MondayOvertimeSalary = timeSheetService.monOverPay(); this.TuesdayOvertimeSalary = timeSheetService.tueOverPay(); this.WednesdayOvertimeSalary = timeSheetService.wedOverPay(); this.ThursdayOvertimeSalary = timeSheetService.thuOverPay(); this.FridayOvertimeSalary = timeSheetService.friOverPay(); this.NetPay = timeSheetService.weeklySalary; } this.prepare(); } appPayrollApplication.controller("PayrollController", processPayroll);
using System.Web.Optimization; namespace PayrollPreparation2 { public class BundleConfig { // For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862 public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js", "~/Scripts/angular.js", "~/Scripts/PayrollManagement.js", "~/Scripts/TimeSheetEvaluation.js")); bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.validate*")); // Use the development version of Modernizr to develop with and learn from. Then, when you're // ready for production, use the build tool at https://modernizr.com to pick only the tests you need. bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( "~/Scripts/modernizr-*")); bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( "~/Scripts/bootstrap.js")); bundles.Add(new StyleBundle("~/Content/css").Include( "~/Content/bootstrap.css", "~/Content/site.css", "~/Content/PayrollPreparation.css")); } } }
using System.Web.Mvc;
namespace PayrollPreparation2.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
public ActionResult TimeSheetEvaluation()
{
return View();
}
}
}
@{ ViewBag.Title = "Payroll Evaluation"; } @Scripts.Render("~/bundles/jquery") <div ng-app="appPayroll"> <h2 class="common-font text-center bold">Payroll Evaluation</h2> <hr /> <div class="delimiter" ng-controller="PayrollController as pay"> <form name="TimeSheetEvaluation" method="post"> <table> <tr> <td class="large-text bold">Hourly Salary:</td> <td colspan="5"><input type="text" class="form-control ng-model" ng-model="pay.HourlySalary" /></td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> <table class="table table-striped"> <tr> <td> </td> <td class="bold text-center">Monday</td> <td class="bold text-center">Tuesday</td> <td class="bold text-center">Wednesday</td> <td class="bold text-center">Thursday</td> <td class="bold text-center">Friday</td> </tr> <tr> <td class="bold">Time Worked:</td> <td><input type="text" class="form-control ng-model" ng-model="pay.Monday" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Tuesday" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Wednesday" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Thursday" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Friday" /></td> </tr> <tr> <td class="bold">Regular Time:</td> <td>{{pay.MondayRegularTime | number: 2}}</td> <td>{{pay.TuesdayRegularTime | number: 2}}</td> <td>{{pay.WednesdayRegularTime | number: 2}}</td> <td>{{pay.ThursdayRegularTime | number: 2}}</td> <td>{{pay.FridayRegularTime | number: 2}}</td> </tr> <tr> <td class="bold">Regular Salary:</td> <td>{{pay.MondayRegularSalary | number: 2}}</td> <td>{{pay.TuesdayRegularSalary | number: 2}}</td> <td>{{pay.WednesdayRegularSalary | number: 2}}</td> <td>{{pay.ThursdayRegularSalary | number: 2}}</td> <td>{{pay.FridayRegularSalary | number: 2}}</td> </tr> <tr> <td class="bold">Overtime:</td> <td>{{pay.MondayOvertime | number: 2}}</td> <td>{{pay.TuesdayOvertime | number: 2}}</td> <td>{{pay.WednesdayOvertime | number: 2}}</td> <td>{{pay.ThursdayOvertime | number: 2}}</td> <td>{{pay.FridayOvertime | number: 2}}</td> </tr> <tr> <td class="bold">Overtime Salary:</td> <td>{{pay.MondayOvertimeSalary | number: 2}}</td> <td>{{pay.TuesdayOvertimeSalary | number: 2}}</td> <td>{{pay.WednesdayOvertimeSalary | number: 2}}</td> <td>{{pay.ThursdayOvertimeSalary | number: 2}}</td> <td>{{pay.FridayOvertimeSalary | number: 2}}</td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td class="bold">Weekly Salary:</td> <td>{{pay.NetPay | number: 2}}</td> </tr> </table> </form> </div> </div>
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Fun Department Store :: @ViewBag.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink("Fun Department Store Home", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Payroll Evaluation", "TimeSheetEvaluation", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul> </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p class="text-center common-font">© @DateTime.Now.Year - Fun Department Store (FDS)</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
Passing Arguments to a Service
A method of a service can use one or more parameters that would assist the service in performing its job. To prepare the method for an argument, add the name of a parameter to its parentheses. In the body of the method, ignore or use the parameter. Here is an example:
function announce() {
this.validateUsername = function (uname) {
if ((uname.length < 6) || (uname.length > 8)) {
return "The username you are trying to create is not valid (too short or too long). Make sure your new user has 6 to 8 characters";
}
else {
return "Thank you, your username has been validated."
}
}
}
When calling the method in the controller, make sure you pass an appropriate value for the argument. Here is an example:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Exercise</title> <script src="Scripts/angular.min.js"></script> </head> <body ng-app="appTimeSheet"> <script> var app = angular.module('appTimeSheet', []); app.service('tsService', announce); app.controller("TimeSheetController", present); function announce() { this.validateUsername = function (uname) { if ((uname.length < 6) || (uname.length > 8)) { return "The username you are trying to create is not valid (too short or too long). Make sure your new user has 6 to 8 characters"; } else { return "Thank you, your username has been validated." } } } function present(tsService) { this.first = tsService.validateUsername("beth"); this.second = tsService.validateUsername("stephen"); } </script> <div ng-controller="TimeSheetController as tsc"> <p><b>Error:</b> {{tsc.first}}</p> <p><b>Congratulations:</b> {{tsc.second}}</p> </div> </body> </html>
Of course, you can define the function in its placeholder. Here is an example:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Kolo Bank</title>
<script src="Scripts/angular.min.js"></script>
</head>
<body ng-app="appBanking">
<script>
var app = angular.module('appBanking', []);
app.service('bankService', function announce() {
this.validateUsername = function (pass) {
if (pass.length < 10) {
return "Invalid Credentials: Your password must have at least 10 characters";
}
else {
return "Good Job: Your password meets our minimum requirements."
}
}
});
app.controller("TimeSheetController", present);
function present(bankService) {
var password = "P@s$word1";
this.first = bankService.validateUsername(password);
password = 'N0rthD@k8ta!!!'
this.second = bankService.validateUsername(password);
}
</script>
<div ng-controller="TimeSheetController as tsc">
<p>{{tsc.first}}</p>
<p>{{tsc.second}}</p>
</div>
</body>
</html>
In the same way, you can create a service-based method that uses as many parameters as you want. When creating the method, provide a name for each parameter. When calling the function, provide an appropriate value for the argument.
Practical Learning: Passing Arguments to a Service
function calculateSalary() { function calculateRegularTime(time) { if (time <= 8.00) return time; else return 8.00; } function calculateOvertime(time) { if (time <= 8.00) return 0.00; else return time - 8.00; } this.monRegularTime = function (time) { return calculateRegularTime(time); } this.tueRegularTime = function (time) { return calculateRegularTime(time); } this.wedRegularTime = function (time) { return calculateRegularTime(time); } this.thuRegularTime = function (time) { return calculateRegularTime(time); } this.friRegularTime = function (time) { return calculateRegularTime(time); } this.monRegularPay = function (time, wage) { return calculateRegularTime(time) * wage; } this.tueRegularPay = function (time, wage) { return calculateRegularTime(time) * wage; } this.wedRegularPay = function (time, wage) { return calculateRegularTime(time) * wage; } this.thuRegularPay = function (time, wage) { return calculateRegularTime(time) * wage; } this.friRegularPay = function (time, wage) { return calculateRegularTime(time) * wage; } this.monOvertime = function (time) { return calculateOvertime(time); } this.tueOvertime = function (time) { return calculateOvertime(time); } this.wedOvertime = function (time) { return calculateOvertime(time); } this.thuOvertime = function (time) { return calculateOvertime(time); } this.friOvertime = function (time) { return calculateOvertime(time); } this.monOverPay = function (time, wage) { return calculateOvertime(time) * wage * 1.50; } this.tueOverPay = function (time, wage) { return calculateOvertime(time) * wage * 1.50; } this.wedOverPay = function (time, wage) { return calculateOvertime(time) * wage * 1.50; } this.thuOverPay = function (time, wage) { return calculateOvertime(time) * wage * 1.50; } this.friOverPay = function (time, wage) { return calculateOvertime(time) * wage * 1.50; } this.weeklySalary = function (wage, day1, day2, day3, day4, day5) { return (calculateRegularTime(day1) * wage) + (calculateRegularTime(day2) * wage) + (calculateRegularTime(day3) * wage) + (calculateRegularTime(day4) * wage) + (calculateRegularTime(day5) * wage) + (calculateOvertime(day1) * wage * 1.50) + (calculateOvertime(day2) * wage * 1.50) + (calculateOvertime(day3) * wage * 1.50) + (calculateOvertime(day4) * wage * 1.50) + (calculateOvertime(day5) * wage * 1.50); } } appPayrollApplication.service("timeSheetService", calculateSalary);
var appPayrollApplication = angular.module("appPayroll", []); function processPayroll(timeSheetService) { this.prepare = function () { var sal = Number(this.HourlySalary || 0); var mon = Number(this.Monday || 0); var tue = Number(this.Tuesday || 0); var wed = Number(this.Wednesday || 0); var thu = Number(this.Thursday || 0); var fri = Number(this.Friday || 0); this.MondayRegularTime = timeSheetService.monRegularTime(mon); this.TuesdayRegularTime = timeSheetService.tueRegularTime(tue); this.WednesdayRegularTime = timeSheetService.wedRegularTime(wed); this.ThursdayRegularTime = timeSheetService.thuRegularTime(thu); this.FridayRegularTime = timeSheetService.friRegularTime(fri); this.MondayRegularSalary = timeSheetService.monRegularPay(mon, sal); this.TuesdayRegularSalary = timeSheetService.tueRegularPay(tue, sal); this.WednesdayRegularSalary = timeSheetService.wedRegularPay(wed, sal); this.ThursdayRegularSalary = timeSheetService.thuRegularPay(thu, sal); this.FridayRegularSalary = timeSheetService.friRegularPay(fri, sal); this.MondayOvertime = timeSheetService.monOvertime(mon); this.TuesdayOvertime = timeSheetService.tueOvertime(tue); this.WednesdayOvertime = timeSheetService.wedOvertime(wed); this.ThursdayOvertime = timeSheetService.thuOvertime(thu); this.FridayOvertime = timeSheetService.friOvertime(fri); this.MondayOvertimeSalary = timeSheetService.monOverPay(mon, sal); this.TuesdayOvertimeSalary = timeSheetService.tueOverPay(tue, sal); this.WednesdayOvertimeSalary = timeSheetService.wedOverPay(wed, sal); this.ThursdayOvertimeSalary = timeSheetService.thuOverPay(thu, sal); this.FridayOvertimeSalary = timeSheetService.friOverPay(fri, sal); this.NetPay = timeSheetService.weeklySalary(sal, mon, tue, wed, thu, fri); } } appPayrollApplication.controller("PayrollController", processPayroll);
@{ ViewBag.Title = "Payroll Evaluation"; } @Scripts.Render("~/bundles/jquery") <div ng-app="appPayroll"> <h2 class="common-font text-center bold">Payroll Evaluation</h2> <hr /> <div class="delimiter" ng-controller="PayrollController as pay"> <form name="TimeSheetEvaluation" method="post"> <table> <tr> <td class="large-text bold">Hourly Salary:</td> <td colspan="5"><input type="text" class="form-control ng-model" ng-model="pay.HourlySalary" /></td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </table> <table class="table table-striped"> <tr> <td> </td> <td class="bold text-center">Monday</td> <td class="bold text-center">Tuesday</td> <td class="bold text-center">Wednesday</td> <td class="bold text-center">Thursday</td> <td class="bold text-center">Friday</td> </tr> <tr> <td class="bold">Time Worked:</td> <td><input type="text" class="form-control ng-model" ng-model="pay.Monday" ng-change="pay.prepare()" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Tuesday" ng-change="pay.prepare()" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Wednesday" ng-change="pay.prepare()" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Thursday" ng-change="pay.prepare()" /></td> <td><input type="text" class="form-control ng-model" ng-model="pay.Friday" ng-change="pay.prepare()" /></td> </tr> <tr> <td class="bold">Regular Time:</td> <td>{{pay.MondayRegularTime | number: 2}}</td> <td>{{pay.TuesdayRegularTime | number: 2}}</td> <td>{{pay.WednesdayRegularTime | number: 2}}</td> <td>{{pay.ThursdayRegularTime | number: 2}}</td> <td>{{pay.FridayRegularTime | number: 2}}</td> </tr> <tr> <td class="bold">Regular Salary:</td> <td>{{pay.MondayRegularSalary | number: 2}}</td> <td>{{pay.TuesdayRegularSalary | number: 2}}</td> <td>{{pay.WednesdayRegularSalary | number: 2}}</td> <td>{{pay.ThursdayRegularSalary | number: 2}}</td> <td>{{pay.FridayRegularSalary | number: 2}}</td> </tr> <tr> <td class="bold">Overtime:</td> <td>{{pay.MondayOvertime | number: 2}}</td> <td>{{pay.TuesdayOvertime | number: 2}}</td> <td>{{pay.WednesdayOvertime | number: 2}}</td> <td>{{pay.ThursdayOvertime | number: 2}}</td> <td>{{pay.FridayOvertime | number: 2}}</td> </tr> <tr> <td class="bold">Overtime Salary:</td> <td>{{pay.MondayOvertimeSalary | number: 2}}</td> <td>{{pay.TuesdayOvertimeSalary | number: 2}}</td> <td>{{pay.WednesdayOvertimeSalary | number: 2}}</td> <td>{{pay.ThursdayOvertimeSalary | number: 2}}</td> <td>{{pay.FridayOvertimeSalary | number: 2}}</td> </tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td class="bold">Weekly Salary:</td> <td>{{pay.NetPay | number: 2}}</td> </tr> </table> </form> </div> </div>
Hourly Salary: 16.36 Monday: 9.50 Tuesday: 8.00 Wednesday: 7.00 Thursday: 10.50 Friday: 6.50
Using Many Services
Introduction
Just like an application can use many controllers, a controller can use many services. After creating the services, to use them in a controller, pass them as arguments to the constructor of the intended controller. As always, the arguments must be separated by commas. Here is an example:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Watts' A Loan</title>
<link href="Content/bootstrap.css" rel="stylesheet" />
<script src="Scripts/angular.min.js"></script>
</head>
<body>
<h1>Watts' A Loan</h1>
<script type="text/javascript">
var appWAL = angular.module("appWattsALoan", []);
function compInterestCalculations() {
}
appWAL.service('compoundInterest', compInterestCalculations);
function machineIdentification() {
}
appWAL.service('businessMachines', compInterestCalculations);
function manage(compoundInterest, businessMachines) {
}
appWAL.controller("LoansController", manage);
</script>
</body>
</html>
Practical Learning: Introducing Multiple Services
function evaluateTaxes() { } appPayrollApplication.service('payCheckService', evaluateTaxes);
using System.Web.Optimization;
namespace PayrollPreparation2
{
public class BundleConfig
{
// For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js",
"~/Scripts/angular.js",
"~/Scripts/PayrollManagement.js",
"~/Scripts/TimeSheetEvaluation.js",
"~/Scripts/PayCheckEvaluation.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
// Use the development version of Modernizr to develop with and learn from. Then, when you're
// ready for production, use the build tool at https://modernizr.com to pick only the tests you need.
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css",
"~/Content/PayrollPreparation.css"));
}
}
}
var appPayrollApplication = angular.module("appPayroll", []);
function processPayroll(timeSheetService, payCheckService) {
this.prepare = function () {
. . . No Change
}
}
appPayrollApplication.controller("PayrollController", processPayroll);
Accessing Multiple Services of a Controller
If your controller is using many services, you can use the same steps to pass the service to the controller and access its job in a webpage. Here is an example:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Watts' A Loan</title> <link href="Content/bootstrap.css" rel="stylesheet" /> <script src="Scripts/angular.min.js"></script> </head> <body> <script type="text/javascript"> var appWAL = angular.module("appWattsALoan", []); function loanIdentification() { this.reason = "The reason or subject of the loan must be identified."; } appWAL.service('loanSubject', loanIdentification); function compInterestCalculations() { this.introduction = "This service is used to evaluate a loan using its principal, an interest rate, and the length of the loan"; } appWAL.service('compoundInterest', compInterestCalculations); function manage(compoundInterest, loanSubject) { this.presentation = compoundInterest.introduction; this.justification = loanSubject.reason; } appWAL.controller("LoansController", manage); </script> <h1>Watts' A Loan</h1> <div ng-app="appWattsALoan"> <div ng-controller="LoansController as lc"> <p>Introduction: {{lc.presentation}}</p> <p>{{lc.justification}}</p> </div> </div> <form name="LoanEvaluation" method="get"> </form> </body> </html>
Notmally, you usually use different services so that each can take care of a particular aspect of the project. In fact, if a service performs many or long operations, you can create it in iits own file.
Practical Learning: Accessing Multiple Services
function evaluateTaxes() {
var allowanceRate = 77.90;
this.withheldAllowances = function (exmpt) { return allowanceRate * exmpt; }
this.taxedAmount = function (sal, exmpt) { return sal - (allowanceRate * exmpt); };
this.taxesBasedOnStatus = function (sal, exmpt) {
var withheldAmount = 0;
var taxableSalary = sal - (allowanceRate * exmpt);
return withheldAmount = (taxableSalary - 44) * 10 / 100;
}
}
appPayrollApplication.service('payCheckService', evaluateTaxes);
var appPayrollApplication = angular.module("appPayroll", []);
function processPayroll(timeSheetService, payCheckService) {
this.prepare = function () {
var sal = Number(this.HourlySalary || 0);
var mon = Number(this.Monday || 0);
var tue = Number(this.Tuesday || 0);
var wed = Number(this.Wednesday || 0);
var thu = Number(this.Thursday || 0);
var fri = Number(this.Friday || 0);
this.MondayRegularTime = timeSheetService.monRegularTime(mon);
this.TuesdayRegularTime = timeSheetService.tueRegularTime(tue);
this.WednesdayRegularTime = timeSheetService.wedRegularTime(wed);
this.ThursdayRegularTime = timeSheetService.thuRegularTime(thu);
this.FridayRegularTime = timeSheetService.friRegularTime(fri);
this.MondayRegularSalary = timeSheetService.monRegularPay(mon, sal);
this.TuesdayRegularSalary = timeSheetService.tueRegularPay(tue, sal);
this.WednesdayRegularSalary = timeSheetService.wedRegularPay(wed, sal);
this.ThursdayRegularSalary = timeSheetService.thuRegularPay(thu, sal);
this.FridayRegularSalary = timeSheetService.friRegularPay(fri, sal);
this.MondayOvertime = timeSheetService.monOvertime(mon);
this.TuesdayOvertime = timeSheetService.tueOvertime(tue);
this.WednesdayOvertime = timeSheetService.wedOvertime(wed);
this.ThursdayOvertime = timeSheetService.thuOvertime(thu);
this.FridayOvertime = timeSheetService.friOvertime(fri);
this.MondayOvertimeSalary = timeSheetService.monOverPay(mon, sal);
this.TuesdayOvertimeSalary = timeSheetService.tueOverPay(tue, sal);
this.WednesdayOvertimeSalary = timeSheetService.wedOverPay(wed, sal);
this.ThursdayOvertimeSalary = timeSheetService.thuOverPay(thu, sal);
this.FridayOvertimeSalary = timeSheetService.friOverPay(fri, sal);
this.NetPay = timeSheetService.weeklySalary(sal, mon, tue, wed, thu, fri);
var dependents = Number(this.exemptions || 0);
this.grossSalary = timeSheetService.weeklySalary(sal, mon, tue, wed, thu, fri);
this.allowances = payCheckService.withheldAllowances(dependents)
this.taxableGrossWages = payCheckService.taxedAmount(this.NetPay, dependents);
this.federalIncomeTax = payCheckService.taxesBasedOnStatus(this.NetPay, dependents);
}
}
appPayrollApplication.controller("PayrollController", processPayroll);
@{
ViewBag.Title = "Payroll Evaluation";
}
@Scripts.Render("~/bundles/jquery")
<div ng-app="appPayroll">
<h2 class="common-font text-center bold">Payroll Evaluation</h2>
<hr />
<div class="delimiter" ng-controller="PayrollController as pay">
<form name="TimeSheetEvaluation" method="post">
<table>
<tr>
<td class="large-text bold">Hourly Salary:</td>
<td colspan="5"><input type="text" class="form-control ng-model" ng-model="pay.HourlySalary" /></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<table class="table table-striped">
<tr>
<td> </td>
<td class="bold text-center">Monday</td>
<td class="bold text-center">Tuesday</td>
<td class="bold text-center">Wednesday</td>
<td class="bold text-center">Thursday</td>
<td class="bold text-center">Friday</td>
</tr>
<tr>
<td class="bold">Time Worked:</td>
<td><input type="text" class="form-control ng-model" ng-model="pay.Monday" ng-change="pay.prepare()" /></td>
<td><input type="text" class="form-control ng-model" ng-model="pay.Tuesday" ng-change="pay.prepare()" /></td>
<td><input type="text" class="form-control ng-model" ng-model="pay.Wednesday" ng-change="pay.prepare()" /></td>
<td><input type="text" class="form-control ng-model" ng-model="pay.Thursday" ng-change="pay.prepare()" /></td>
<td><input type="text" class="form-control ng-model" ng-model="pay.Friday" ng-change="pay.prepare()" /></td>
</tr>
<tr>
<td class="bold">Regular Time:</td>
<td>{{pay.MondayRegularTime | number: 2}}</td>
<td>{{pay.TuesdayRegularTime | number: 2}}</td>
<td>{{pay.WednesdayRegularTime | number: 2}}</td>
<td>{{pay.ThursdayRegularTime | number: 2}}</td>
<td>{{pay.FridayRegularTime | number: 2}}</td>
</tr>
<tr>
<td class="bold">Regular Salary:</td>
<td>{{pay.MondayRegularSalary | number: 2}}</td>
<td>{{pay.TuesdayRegularSalary | number: 2}}</td>
<td>{{pay.WednesdayRegularSalary | number: 2}}</td>
<td>{{pay.ThursdayRegularSalary | number: 2}}</td>
<td>{{pay.FridayRegularSalary | number: 2}}</td>
</tr>
<tr>
<td class="bold">Overtime:</td>
<td>{{pay.MondayOvertime | number: 2}}</td>
<td>{{pay.TuesdayOvertime | number: 2}}</td>
<td>{{pay.WednesdayOvertime | number: 2}}</td>
<td>{{pay.ThursdayOvertime | number: 2}}</td>
<td>{{pay.FridayOvertime | number: 2}}</td>
</tr>
<tr>
<td class="bold">Overtime Salary:</td>
<td>{{pay.MondayOvertimeSalary | number: 2}}</td>
<td>{{pay.TuesdayOvertimeSalary | number: 2}}</td>
<td>{{pay.WednesdayOvertimeSalary | number: 2}}</td>
<td>{{pay.ThursdayOvertimeSalary | number: 2}}</td>
<td>{{pay.FridayOvertimeSalary | number: 2}}</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td class="bold">Weekly Salary:</td>
<td>{{pay.NetPay | number: 2}}</td>
</tr>
</table>
<table class="table table-striped">
<tr>
<td class="left-column bold">Gross Salary:</td>
<td>{{pay.grossSalary | number: 2}}</td>
</tr>
<tr>
<td class="bold">Exemptions:</td>
<td>
<input type="number" class="form-control ng-model"
ng-model="pay.exemptions" ng-change="pay.prepare()" />
</td>
</tr>
<tr>
<td class="bold">Allowances:</td>
<td>{{pay.allowances | number: 2}}</td>
</tr>
<tr>
<td class="bold">Taxable Gross Wages:</td>
<td>{{pay.taxableGrossWages | number: 2}}</td>
</tr>
<tr>
<td class="bold">Federal Income Tax:</td>
<td>{{pay.federalIncomeTax | number: 2}}</td>
</tr>
</table>
</form>
</div>
</div>
Hourly Salary: 16.38 Monday: 7.50 Tuesday: 9.50 Wednesday: 8 Thursday: 10 Friday: 9 Exemptions: 1
|
||
Previous | Copyright © 2017-2022, FunctionX | Next |
|