Introduction to Built-In AngularJS Services
Introduction to Built-In AngularJS Services
Overview of AngularJS Services
Introduction to Built-In Services
Before creating services for your projects, AngularJS provides many built-in services that you can directly use in your code. Of course, the services provide different functionalities. Each service is created as, or represents, an object. This means that the services may have properties and methods. Some services are AngularJS adaptation of HTML (the DOM). Some others are proper to AngularJS. The names of the built-in services start with $ followed by one or more letters. To use a service, you must apply it to a component that needs it.
Practical Learning: Introducing Built-In Services
body { background-color: #F2EDDA; } .bold { font-weight: 600; } .installation-contents { margin: auto; width: 340px; } .main-title { color: maroon; } .short-text { width: 60px; } .medium-text { width: 80px; } .left-col { width: 120px; } .large-col { width: 180px; } .group-box { border-radius: 5px; padding-left: 20px; padding-right: 20px; width: 350px; background-color: #E0DCCC; border: 2px solid #800000; } .group-box legend { border-radius: 5px; margin-left: 10px; font-size: 16px; width: 235px; color: #E5DDAF; background-color: #6B2C3D; padding: 5px 15px; box-shadow: 0 0 0 5px #E5DDAF; } .tbl-installations { margin-bottom: 15px; width: 100%; margin-left: 15px; } .common-font { font-family: Georgia, Garamond, 'Times New Roman', serif; }
using System.Web.Optimization; namespace TireDirect1 { 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")); 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/TireDirect.css")); } } }
using System.Web.Mvc;
namespace TireDirect1.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 TireInstallationSalary()
{
return View();
}
}
}
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tire Direct :: @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("Tire Direct Home", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Tire Installation Salary", "TireInstallationSalary", "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="common-font text-center">© @DateTime.Now.Year - Tire Direct</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
@{ ViewBag.Title = "Tire Installation Salary"; } <h2 class="text-center common-font bold main-title">Tire Installation Salary</h2> @Scripts.Render("~/bundles/jquery") <div class="installation-contents common-font" ng-app> <form name="TireInstallation" method="post"> <table> <tr> <td class="bold">Base Hourly Rate:</td> <td><input type="number" class="form-control medium-text" ng-model="baseHourlyRate" /></td> <td class="bold">/Hr</td> </tr> <tr> <td class="bold">Base Tire Rate:</td> <td><input type="number" class="form-control medium-text" ng-model="baseTireRate" /></td> <td class="bold">/Tire</td> </tr> </table> <hr /> <fieldset class="group-box"> <legend>Number of Tires Installed on</legend> <table class="tbl-installations"> <tr> <td class="bold left-col">Day</td> <td class="bold">Tires</td> <td class="bold">Salary</td> </tr> <tr> <td class="bold">Monday:</td> <td><input type="number" class="form-control short-text" ng-model="MondayInstallations" /></td> <td>{{MondayInstallations * baseTireRate | number : 2}}</td> </tr> <tr> <td class="bold common-font">Tuesday:</td> <td><input type="number" class="form-control short-text" ng-model="TuesdayInstallations" /></td> <td>{{TuesdayInstallations * baseTireRate | number : 2}}</td> </tr> <tr> <td class="bold common-font">Wednesday:</td> <td><input type="number" class="form-control short-text" ng-model="WednesdayInstallations" /></td> <td>{{WednesdayInstallations * baseTireRate | number : 2}}</td> </tr> <tr> <td class="bold common-font">Thursday:</td> <td><input type="number" class="form-control short-text" ng-model="ThursdayInstallations" /></td> <td>{{ThursdayInstallations * baseTireRate | number : 2}}</td> </tr> <tr> <td class="bold common-font">Friday:</td> <td><input type="number" class="form-control short-text" ng-model="FridayInstallations" /></td> <td>{{FridayInstallations * baseTireRate | number : 2}}</td> </tr> </table> <hr /> <table> <tr> <td class="left-col"> </td> <td class="left-col bold text-center">Net Pay:</td> <td class="text-right">{{(MondayInstallations * baseTireRate) + (TuesdayInstallations * baseTireRate) + (WednesdayInstallations * baseTireRate) + (ThursdayInstallations * baseTireRate) + (FridayInstallations * baseTireRate) | number : 2}}</td> </tr> </table> </fieldset> </form> </div>
Base Hourly Rate: 10.05 Base Tire Rate: 0.92 Monday: 112 Tuesday: 68 Wednesday: 84 Thursday: 47 Friday: 73
var appTireInstallation = angular.module('tireInstallation', []); function evaluate() { } appTireInstallation.controller("TireInstallationController", evaluate);
using System.Web.Optimization;
namespace TireDirect1
{
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/SalaryEvaluation.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/TireDirect.css"));
}
}
}
Watching Code
In application programming, a watch is a sub-program that knows (is aware of) the variables, the objects (the classes, their properties, their constants, and their methods), and expressions in order to monitor them. Among the jobs of a watch is to be aware when something changes, such as when a file is opened, when an existing file changes, when an expression changes, etc. In other words, a watch is used to monitor code execution.
To support watches, AngularJS provides a service named $watch.
Scoping Data
Introduction
You may already know that, in an ASP.NET MVC project, to let a controller class be able to send values to a view, the Controller class, which is the parent of the controller classes, is equipped with a property named ViewBag. You can add (or attach) any property to that variable. To let you exchange values between an AngularJS object (such as a controller, a service, or an event) and the HTML tags of a webpage (that is, the tags that use AngularJS directives, such as webcontrols or {{}} placeholders), AngularJS provides special services named scopes.
Introduction to Scopes
As you may be aware by your current knowledge of application programming, a scope is the area in which a variable or an object is available, such as inside a method of a class or a webpage. To provide an object that can monitor the area of influence of a variable or object, AngularJS provides a service named $rootScope. To further control the areas of influence of variables and objects, other scopes can be created from $rootScope. To let you create a child scope, the $rootScope object provides a method named $new.
Introduction to the Scope Service
To allow an AngujarJS component, such as a controller, to exchange data with a webpage (a view), AngularJS provides a service named $scope. This service is derived from the $rootScope service. To use the $rootScope or the $scope service, first pass it as argument to the function defined in (or for) a controller. Here is an example:
function calculate($scope) {
}
angular
.module('customized', [])
.controller('EmployeesController', calculate);
In the body of the function, you can declare a var variable and initialize it with the $rootScope or the $scope object. Here is an example:
var app = angular.module('rosh', []);
app.controller('GradesReportsController', function ($rootScope) {
var reports = $rootScope;
});
You can use the $rootScope or the $scope object the same way you would use ViewBag in a method of an ASP.NET MVC controller class. That is, apply a desired property to it, with a period between them. This would be done as follows:
var appModule = angular.module('toysModule', []);
appModule.controller('ToysController', function ($scope) {
$scope.toyName;
});
If you had declared a variable for the $rootScope or the $scope object, you can attach the property to that variable. Here is an example:
var app = angular.module('rosh', []);
app.controller('GradesReportsController', function ($rootScope) {
var reports = $rootScope;
reports.title
});
Adding a Property to a Scope
The primary purpose of the $scope object is to serve as an intermediary between the HTML tags of a section where AngularJS is used and an AngularJS controller. Therefore, in the body of the function, you can access each webcontrol by its ng-model name using the $scope object the same way we were using the this object in a service.
To pass values from a controller to a view, you can set the desired value to a property attached to the $rootScope or the $scope object. This is done by assigning a value. In the webpage, access the property by its name. Here is an example:
@{ ViewBag.Title = "Exercise"; } <h2>Exercise</h2> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script> <div ng-app="customized" ng-controller="EmployeesController"> @using (Html.BeginForm()) { <p>Yearly Salary: <input type="text" ng-model="yearly" /></p> } </div> <script> function calculate($scope) { $scope.yearly = 64800; } angular .module('customized', []) .controller('EmployeesController', calculate); </script>
You can also access the value using the ng-bind directive included in a text-based or neutral element such as P, PRE, or SPAN. Here is an example:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Red Oak High School</title>
<script src="Scripts/angular.js"></script>
</head>
<body ng-app="rosh">
<div ng-controller="GradesReportsController">
<p>Report Title: <span ng-bind="title"></span></p>
</div>
<script>
var app = angular.module('rosh', []);
app.controller('GradesReportsController', function ($rootScope) {
var reports = $rootScope;
reports.title = 'School Grades Reports';
});
</script>
</body>
</html>
You can also involve the $rootScope or the $scope object appended the ng-model name in any expression of your choice. Here are examples:
@{ ViewBag.Title = "Exercise"; } <h2>Exercise</h2> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script> <div ng-app="customized" ng-controller="EmployeesController"> @using (Html.BeginForm()) { <table> <tr> <td>Yearly Salary:</td> <td><input type="text" ng-model="yearly" /></td> </tr> <tr> <td>Monthly Salary:</td> <td><input type="text" ng-model="monthly" /></td> </tr> </table> } </div> <script> function calculate($scope) { $scope.yearly = 64800; $scope.monthly = $scope.yearly / 12; } angular .module('customized', []) .controller('EmployeesController', calculate); </script>
Remember that you can declare one or more variables in the function of a service or controller. If you want to send the value of a variable declared in a controller-based function to a webpage, you can assign the variable to the $scope object appended with the intended ng-model control. Here is an example:
@{
ViewBag.Title = "Exercise";
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
<h2>Exercise</h2>
<div ng-app="exercise">
<p ng-controller="WisdomController">Wisdom: {{popular}}</p>
</div>
<script>
function say($scope) {
var quote = "Absence of evidence is not evidence of absence.";
$scope.popular = quote;
}
angular.module('exercise', []).controller('WisdomController', say);
</script>
Practical Learning: Initializing a Scoped Property
var appTireInstallation = angular.module('tireInstallation', []); function evaluate($scope) { var hourlyRate = 10.17; var tirePay = 0.96; var monWork = 81, tueWork = 47, wedWork = 97, thuWork = 59, friWork = 93; var monPay = monWork * tirePay; var tuePay = tueWork * tirePay; var wedPay = wedWork * tirePay; var thuPay = thuWork * tirePay; var friPay = friWork * tirePay; var totalPay = monPay + tuePay + wedPay + thuPay + friPay; $scope.FridaySalary = friPay; $scope.MondaySalary = monPay; $scope.baseTireRate = tirePay; $scope.TuesdaySalary = tuePay; $scope.ThursdaySalary = thuPay; $scope.WednesdaySalary = wedPay; $scope.baseHourlyRate = hourlyRate; $scope.MondayInstallations = monWork; $scope.FridayInstallations = friWork; $scope.ThursdayInstallations = thuPay; $scope.TuesdayInstallations = tueWork; $scope.ThursdayInstallations = thuWork; $scope.WednesdayInstallations = wedWork; $scope.TireInstallationsSalary = totalPay; } appTireInstallation.controller('TireInstallationsController', evaluate);
@{ ViewBag.Title = "Tire Installation Salary"; } <h2 class="text-center common-font bold main-title">Tire Installation Salary</h2> @Scripts.Render("~/bundles/jquery") <div class="installation-contents common-font" ng-app="tireInstallation"> <form name="SalaryEvaluation" method="post" ng-controller="TireInstallationsController"> <table> <tr> <td class="bold">Base Hourly Rate:</td> <td><input type="number" class="form-control medium-text" ng-model="baseHourlyRate" /></td> <td class="bold">/Hr</td> </tr> <tr> <td class="bold">Base Tire Rate:</td> <td><input type="number" class="form-control medium-text" ng-model="baseTireRate" /></td> <td class="bold">/Tire</td> </tr> </table> <hr /> <fieldset class="group-box"> <legend>Number of Tires Installed on</legend> <table class="tbl-installations"> <tr> <td class="bold left-col">Day</td> <td class="bold">Tires</td> <td class="bold">Salary</td> </tr> <tr> <td class="bold">Monday:</td> <td><input type="number" class="form-control short-text" ng-model="MondayInstallations" /></td> <td>{{MondaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Tuesday:</td> <td><input type="number" class="form-control short-text" ng-model="TuesdayInstallations" /></td> <td>{{TuesdaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Wednesday:</td> <td><input type="number" class="form-control short-text" ng-model="WednesdayInstallations" /></td> <td>{{WednesdaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Thursday:</td> <td><input type="number" class="form-control short-text" ng-model="ThursdayInstallations" /></td> <td>{{ThursdaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Friday:</td> <td><input type="number" class="form-control short-text" ng-model="FridayInstallations" /></td> <td>{{FridaySalary | number : 2}}</td> </tr> </table> <hr /> <table> <tr> <td class="left-col"> </td> <td class="left-col bold text-center">Net Pay:</td> <td class="text-right">{{TireInstallationsSalary | number : 2}}</td> </tr> </table> </fieldset> </form> </div>
Getting the Value of a Scoped Property
Using the $scope object, you can get (retrieve) the value of an HTML tag such as a webcontrol from a form. To do this, in the controller, type $scope. followed by the ng-model name of the controller. You can then assign that expression to a local variable. Here is an example:
@{ ViewBag.Title = "Employee Record"; } <h2 class="text-center">Employee Record</h2> <form name="EmployeeApplication" method="post" ng-app="employeeModule"> <p ng-controller="EmployeeController"><label for="FirstName">First Name:</label> <input type="text" id="FirstName" ng-model="FirstName" /><br /> {{FirstName}}</p> </form> <script> function hire($scope) { first = $scope.FirstName; } var emplModule = angular.module('employeeModule', []); emplModule.controller('EmployeeController', hire); </script>
Scoping a Controller
Introduction
If you want to access a controller in a webpage, you can add a function to it. This is done by nesting an anonymous function in the constructor of a controller. To proceed, attach a property to the $scope object and assign the function to that property. You can then call that function in a webpage, such as in an event. To access the controller, that is, to call the function, use the name of the property you had attached to the $scope object and add the parentheses.
Practical Learning: Passing Values to a Controller
var appTireInstallation = angular.module('tireInstallation', []); function evaluate($scope) { $scope.transmit = function () { var payRate = 0.00; var hourlyRate = Number($scope.baseHourlyRate || 0); var tirePay = Number($scope.baseTireRate || 0); var monWork = Number($scope.MondayInstallations || 0); var tueWork = Number($scope.TuesdayInstallations || 0); var wedWork = Number($scope.WednesdayInstallations || 0); var thuWork = Number($scope.ThursdayInstallations || 0); var friWork = Number($scope.FridayInstallations || 0); var dailySalary = hourlyRate * 8.00; var dInstallationMondayPay = monWork * tirePay; var dInstallationTuesdayPay = tueWork * tirePay; var dInstallationWednesdayPay = wedWork * tirePay; var dInstallationThursdayPay = thuWork * tirePay; var dInstallationFridayPay = friWork * tirePay; var netPayMonday = dInstallationMondayPay; var netPayTuesday = dInstallationTuesdayPay; var netPayWednesday = dInstallationWednesdayPay; var netPayThursday = dInstallationThursdayPay; var netPayFriday = dInstallationFridayPay; if (monWork == 0) { netPayMonday = 0; } else { if (dInstallationMondayPay < dailySalary) { netPayMonday = dailySalary; } } if (tueWork == 0) { netPayTuesday = 0; } else { if (dInstallationTuesdayPay < dailySalary) { netPayTuesday = dailySalary; } } if (wedWork == 0) { netPayWednesday; } else { if (dInstallationWednesdayPay < dailySalary) { netPayWednesday = dailySalary; } } if (thuWork == 0) { netPayThursday = 0; } else { if (dInstallationThursdayPay < dailySalary) { netPayThursday = dailySalary; } } if (friWork == 0) { netPayFriday = 0; } else { if (dInstallationFridayPay < dailySalary) { netPayFriday = dailySalary; } } $scope.FridaySalary = netPayFriday; $scope.MondaySalary = netPayMonday; $scope.TuesdaySalary = netPayTuesday; $scope.ThursdaySalary = netPayThursday; $scope.WednesdaySalary = netPayWednesday; $scope.TireInstallationsSalary = netPayMonday + netPayTuesday + netPayWednesday + netPayThursday + netPayFriday; } } appTireInstallation.controller('TireInstallationsController', evaluate);
@{ ViewBag.Title = "Tire Installation Salary"; } <h2 class="text-center common-font bold main-title">Tire Installation Salary</h2> @Scripts.Render("~/bundles/jquery") <div class="installation-contents common-font" ng-app="tireInstallation"> <form name="TireInstallation" method="post" ng-controller="TireInstallationsController"> <table> <tr> <td class="bold">Base Hourly Rate:</td> <td><input type="number" class="form-control medium-text" ng-model="baseHourlyRate" /></td> <td class="bold">/Hr</td> </tr> <tr> <td class="bold">Base Tire Rate:</td> <td><input type="number" class="form-control medium-text" ng-model="baseTireRate" /></td> <td class="bold">/Tire</td> </tr> </table> <hr /> <fieldset class="group-box"> <legend>Number of Tires Installed on</legend> <table class="tbl-installations"> <tr> <td class="bold left-col">Day</td> <td class="bold">Tires</td> <td class="bold">Salary</td> </tr> <tr> <td class="bold">Monday:</td> <td><input type="number" class="form-control short-text" ng-model="MondayInstallations" ng-change="transmit()" /></td> <td>{{MondaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Tuesday:</td> <td><input type="number" class="form-control short-text" ng-model="TuesdayInstallations" ng-change="transmit()" /></td> <td>{{TuesdaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Wednesday:</td> <td><input type="number" class="form-control short-text" ng-model="WednesdayInstallations" ng-change="transmit()" /></td> <td>{{WednesdaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Thursday:</td> <td><input type="number" class="form-control short-text" ng-model="ThursdayInstallations" ng-change="transmit()" /></td> <td>{{ThursdaySalary | number : 2}}</td> </tr> <tr> <td class="bold common-font">Friday:</td> <td><input type="number" class="form-control short-text" ng-model="FridayInstallations" ng-change="transmit()" /></td> <td>{{FridaySalary | number : 2}}</td> </tr> </table> <hr /> <table> <tr> <td class="left-col"> </td> <td class="left-col bold text-center">Net Pay:</td> <td class="text-right">{{TireInstallationsSalary | number : 2}}</td> </tr> </table> </fieldset> </form> </div>
Base Hourly Rate: 11.25 Base Tire Rate: 0.98 Monday: 92 Tuesday: 46 Wednesday: 118 Thursday: 63 Friday: 105
Scoping a Function
If you need to perform an action in a controller, you can create and attach a function to a $scope object. To do this, define a function and assign it to a property attached to the $scope object. Here is an example:
var appExercise = angular.module('appMovies', []); appExercise.controller('QuotationsController', speak); function speak ($scope) { $scope.cite = function () { . . . } }
Although not required, you can name the function if you want. Here is an example:
var appExercise = angular.module('appMovies', []);
appExercise.controller('QuotationsController', bring);
function speak ($scope) {
$scope.cite = function monologue() {
. . .
}
}
As another option (nor required), you can pass the $scope object as argument:
var appExercise = angular.module('appMovies', []);
appExercise.controller('QuotationsController', bring);
function speak ($scope) {
$scope.cite = function monologue($scope) {
. . .
}
}
To call the method in a webpage, use its name and apply the parentheses to it. Here is an example:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Movies Quotes</title>
<script src="Scripts/angular.min.js"></script>
</head>
<body ng-app="appMovies" ng-controller="QuotationsController">
<h1>Movies Quotes</h1>
<p>{{cite()}}</p>
<script type="text/javascript">
var appExercise = angular.module('appMovies', []);
appExercise.controller('QuotationsController', speak);
function speak ($scope) {
$scope.cite = function monologue($scope) {
return "The days of investigative reporting are over, Lauren. " +
"The news isn't news anymore. It's as dead as the typewriter " +
"I used to write it on. Corporate America is running the show now. " +
"And their news agenda is free trade, globalisation and entertainment. " +
"That's our glorious future." +
"--Bordertown--";
}
}
</script>
</body>
</html>
Passing Arguments to a Scope
If you decide to perform some actions directly on a scope, you can provide one or more values to it to assist it. To do this, in the parentheses of a method attached to the scope, provide one or more names of parameters. In the body of the method, use the parameters as you see fit. Here is an example:
var appPayroll = angular.module("appPayroll", []);
appPayroll.controller("PayrollController", calculate);
function calculate($scope) {
$scope.totalPay = function (x, y) {
return x + y;
}
}
When calling the method, use its name, add the parentheses, and pass the appropriate argument(s).
Practical Learning: Passing Arguments to a Scope
body { background-color: white; } .bold { font-weight: 600; } .ng-model { width: 90px; } .work-contents { margin: auto; width: 625px; } .pay-contents { margin: auto; width: 325px; } .font { font-family: Georgia, 'Times New Roman', Times, serif; }
var appPayroll = angular.module("appPayroll", []); appPayroll.controller("PayrollController", calculate); function calculate($scope) { $scope.totalTime = function (a, b, c, d, e) { return Number(a || 0) + Number(b || 0) + Number(c || 0) + Number(d || 0) + Number(e || 0); } $scope.regularTime = function (a, b, c, d, e) { var total = Number(a || 0) + Number(b || 0) + Number(c || 0) + Number(d || 0) + Number(e || 0); if (total <= 40.00) return total; else return 40.00; } $scope.overtime = function (a, b, c, d, e) { var total = Number(a || 0) + Number(b || 0) + Number(c || 0) + Number(d || 0) + Number(e || 0); if (total <= 40.00) return 0.00; else return total - 40.00; } $scope.regularPay = function (a, b, c, d, e, f) { var regTime = $scope.regularTime(b, c, d, e, f); return Number(a || 0) * regTime; } $scope.overtimePay = function (a, b, c, d, e, f) { var over = $scope.overtime(b, c, d, e, f); return Number(a || 0) * over; } $scope.totalPay = function (x, y) { return x + y; } }
using System.Web.Optimization; namespace PayrollPreparation3 { 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/SalaryEvaluation.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 PayrollPreparation3.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 PayrollPreparation()
{
return View();
}
}
}
<!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", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Payroll Evaluation", "PayrollPreparation", "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>
@{ ViewBag.Title = "Payroll Preparation"; } @Scripts.Render("~/bundles/jquery") <div ng-app="appPayroll"> <h2 class="font text-center bold">Payroll Preparation</h2> <hr /> <form name="PayrollEvaluation" method="post" ng-controller="PayrollController"> <div class="work-contents font"> <table> <tr> <td class="bold">Hourly Salary:</td> <td colspan="5"><input type="text" class="form-control ng-model" ng-model="hourlySalary" /></td> </tr> </table> <table class="table table-striped"> <tr> <td class="bold"> </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="number" class="form-control ng-model" ng-model="Monday" /></td> <td><input type="number" class="form-control ng-model" ng-model="Tuesday" /></td> <td><input type="number" class="form-control ng-model" ng-model="Wednesday" /></td> <td><input type="number" class="form-control ng-model" ng-model="Thursday" /></td> <td><input type="number" class="form-control ng-model" ng-model="Friday" /></td> </tr> </table> </div> <div class="pay-contents font"> <table class="table table-striped"> <tr> <td> </td> <td class="text-center bold">Time</td> <td class="text-center bold">Pay</td> </tr> <tr> <td class="bold">Regular:</td> <td class="text-center bold">{{regularTime(Monday, Tuesday, Wednesday, Thursday, Friday) | number : 2}}</td> <td class="text-center bold">{{regularPay(hourlySalary, Monday, Tuesday, Wednesday, Thursday, Friday) | number : 2}}</td> </tr> <tr> <td class="bold">Overtime:</td> <td class="text-center bold">{{overtime(Monday, Tuesday, Wednesday, Thursday, Friday) | number : 2}}</td> <td class="text-center bold">{{overtimePay(hourlySalary, Monday, Tuesday, Wednesday, Thursday, Friday) | number : 2}}</td> </tr> <tr> <td class="bold">Total:</td> <td class="text-center bold">{{totalTime(Monday, Tuesday, Wednesday, Thursday, Friday) | number : 2}}</td> <td class="text-center bold">{{totalPay(regularPay(hourlySalary, Monday, Tuesday, Wednesday, Thursday, Friday), overtimePay(hourlySalary, Monday, Tuesday, Wednesday, Thursday, Friday)) | number : 2}}</td> </tr> </table> </div> </form> </div>
Hourly Salary: 17.05: Monday: 8 Tuesday: 8.50 Wednesday: 10 Thursday: 9.50 Friday: 10.50
Scoping an Object
Introduction
As seen in our introduction to AngularJS controllers and objects, you can create an object in a controller. When it comes to a scope, you can attach an object to it and use that object in both your AngularJS code and the webpage.
Attaching an Object to a Scope
To create an object in a controller, use any of the available techniques except that you can attach it to a scope. As one way to start, you can attach a property to a $scope object and assign the curly brackets to it. Here is an example:
var appCompany = angular.module("appWaterCompany", []);
function create($scope) {
$scope.waterMeter = {};
}
appCompany.controller("MeterController", create);
In the body of the object, add the members you want (properties and methods). Here is an example:
var appCompany = angular.module("appWaterCompany", []); function addMeter($scope) { $scope.waterMeter = { meterNumber: "293-740", make: "Breston", model: "S-93749", size : "3/4 Inches" }; } appCompany.controller("MeterController", addMeter);
In the same way, you can create more objects by attaching them to a $scope object. Here are examples:
var appCompany = angular.module("appWaterCompany", []);
function addMeter($scope) {
$scope.meterB293740 = {
meterNumber: "293-740",
make: "Breston",
model: "S-93749",
size : "3/4 Inches"
};
$scope.meterVW820418 = {
meterNumber: "820-418",
make: "Vashty Worldwide",
model: "DD-3840",
size: "3/4 Inches"
};
}
appCompany.controller("MeterController", addMeter);
If you need different types of objects, you can create different controllers and create the objects of each category in their respective controllers. Here is an example:
var appCompany = angular.module("appWaterCompany", []); function addMeter($scope) { $scope.meterB293740 = { meterNumber: "293-740", make: "Breston", model: "S-93749", size : "3/4 Inches" }; $scope.meterVW820418 = { meterNumber: "820-418", make: "Vashty Worldwide", model: "DD-3840", size: "3/4 Inches" }; } appCompany.controller("MeterController", addMeter); function createCustomer($scope) { $scope.customer = { accountNumber : "2958-314-5294", meterNumber: "627-425", firstName: "Nicholas", lastName: "Thorn", address: "2599 Phenicia Road", city: "Silver Spring", county: "Montgomery", state: "MD" }; } appCompany.controller("CustomerController", createCustomer);
As we saw in our introduction to objects in JavaScript, you can start an object with empty curly brackets. Outside the brackets, to create a property, type $scope., the name of the object, a period, and the desired name of the new property. You can then assign a value to it. Here are examples:
var appCompany = angular.module("appWaterCompany", []);
function addMeter($scope) {
$scope.meterB293740 = {
meterNumber: "293-740", make: "Breston",
model: "S-93749", size : "3/4 Inches"
};
$scope.meterVW820418 = {
meterNumber: "820-418", make: "Vashty Worldwide",
model: "DD-3840", size: "3/4 Inches"
};
}
appCompany.controller("MeterController", addMeter);
function createCustomer($scope) {
$scope.cust29583145294 = {
accountNumber : "2958-314-5294",
meterNumber: "627-425",
firstName: "Nicholas",
lastName: "Thorn",
address: "2599 Phenicia Road",
city: "Silver Spring",
county: "Montgomery",
state: "MD"
};
$scope.cust70293718594 = {};
$scope.cust70293718594.accountNumber = "7029-371-8594";
$scope.cust70293718594.meterNumber= "293-740";
$scope.cust70293718594.firstName = "Danielle";
$scope.cust70293718594.lastName = "Dormand";
$scope.cust70293718594.address = "2515 Guthierez Street";
$scope.cust70293718594.city = "Falls Church";
$scope.cust70293718594.county = "";
$scope.cust70293718594.state = "VA";
}
appCompany.controller("CustomerController", createCustomer);
Accessing an Object
To access the whole object in a webpage, simply use its name. Here is an example:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/WaterMeterManagement.js"></script>
<title>Water Distribution Company</title>
</head>
<body ng-app="appWaterCompany">
<div ng-controller="MeterController">
<p>Water Meter: {{waterMeter}}</p>
</div>
</body>
</html>
To access a property, type the name of the object, a period, and the name of the property. Here are examples:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script src="Scripts/angular.min.js"></script> <script src="Scripts/WaterMeterManagement.js"></script> <title>Water Distribution Company</title> </head> <body ng-app="appWaterCompany"> <div ng-controller="MeterController"> <p>Water Meter: {{meterB293740.make}} {{meterB293740.model}}</p> </div> <div ng-controller="CustomerController"> <p>Customer: {{cust70293718594.firstName + " " + cust70293718594.lastName}}</p> </div> </body> </html>
Performing Operations on an Object
If you want to perform operations on an object, add a method to it. That is, attach a property to the object and assign an anonymous function to it. Here is an example:
$scope.cust70293718594 = {};
$scope.cust70293718594.accountNumber = "7029-371-8594";
$scope.cust70293718594.firstName = "Danielle";
$scope.cust70293718594.lastName = "Dormand";
$scope.cust70293718594.fullName = function () {
return $scope.cust70293718594.firstName + " " + $scope.cust70293718594.lastName
};
To access the method in a webpage, apply the property to the object and use the parentheses.
Practical Learning: Ending the Lesson.
|
||
Previous | Copyright © 2017-2022, FunctionX | Next |
|