AngularJS 示例
一个我创建的 AngularJS 项目的剖析。我们将讨论应用程序的各个部分,从 HTML 元素到后端控制器和服务。
引言
今天,我们将创建一个简单的 AngularJS CRUD 应用程序。我是在 Visual Studio 2013 中创建了这个应用程序。我也下载了一些依赖项,例如 AngularJS、Bootstrap 和 Jquery。
如果您想查看应用程序的实时副本,可以通过单击此处的链接进行查看
更新
我在这里创建了一篇关于验证技巧的文章:AngularJS 中的验证。请查看。它向您展示如何验证您在表单中输入的数据。
背景
AngularJS 旨在通过允许开发人员将代码分离到模块、控制器和服务中来简化 Web 开发。该框架在开发领域非常流行,越来越多的公司正在使用它。
Application
这是应用程序的屏幕截图。此应用程序允许您添加、删除和浏览租户列表。我们正在使用 bootstrap、AngularJS、JQuery。 Visual Studio 解决方案用于跟踪所有依赖项。
模块
AngularJS 应用程序的核心是模块。要创建一个模块,我们创建一个名为realestateApp.js的 JavaScript 文件。内容是
(function () {
angular.module("realestateApp", []);
}());
这将创建一个名为 realestateApp
的模块。我们将在 HTML 文件中以这种方式在我们的应用程序中使用这个模块
<body ng-app="realestateApp" class="ng-scope">
控制器 (Controller)
接下来,我们需要一个控制器来访问模型数据和方法。 这行代码将注册一个名为 tenantsController
的控制器,如下所示
<div class="container" ng-controller="tenantsController" ngcloak>
此控制器包含一个名为 $scope
的 angular 值,它类似于 div
内部元素可以访问的模型。在我们的应用程序中,我们以这种方式将模型添加到 $scope
$scope.tenant = tenantService.getTenant(0);
这允许 div
使用 tenant
作为用于双向绑定的模型,并且还可以使用模型上的方法。一个例子是如何用两种方式完成的。一种是在输入文本框中使用模型,如下所示
<input type="text" ng-model="tenant.FirstName" placeholder="Enter a name here">
文本表单中的任何更改都将自动更新模型,因此无需保存。
另一种方法是将函数分配给按钮上的 click 事件,如下所示
<button class="btn btn-primary" ng-click="previousTenant()">
这允许表单事件调用函数来更新模型对象,并提供诸如加载、添加和删除数据到模型等功能。
我们称之为 tenantsController
的控制器包含从名为 tenantService
的服务加载模型的方法。该服务在 tenantsController.js 中使用以下代码行注册
app.controller("tenantsController", ["$scope", "tenantService", tenantsController]);
它也具有操作模型的方法。在我们的应用程序中,我们使用 4 种方法,我在此处包含代码
(function (app) {
var tenantsController = function ($scope, tenantService) {
var init = function () {
$scope.tenant = tenantService.getTenant(0);
};
var index = 0;
$scope.nextTenant = function () {
index++;
if (tenantService.isOverflow(index))
{
index--;
}
$scope.tenant = tenantService.getTenant(index);
}
$scope.previousTenant = function () {
index--;
if (index < 0) {
index = 0;
}
$scope.tenant = tenantService.getTenant(index);
}
$scope.addTenant = function () {
index--;
if (index < 0) {
index = 0;
}
$scope.tenant = tenantService.addTenant(index);
}
$scope.deleteTenant = function () {
$scope.tenant = tenantService.deleteTenant(index);
index--;
}
init();
};
app.controller("tenantsController", ["$scope", "tenantService", tenantsController]);
}(angular.module("realestateApp")));
这些函数将在 UI 中可用,以连接到诸如按钮按下、按键和其他事件等事件。
Service
这些方法与模型一起通过名为 tenantService
的服务提供。此服务包含 JSON 格式的原始数据,这是一个小样本
var tenant =
[
{
Id : 1,
FirstName: "Jose",
LastName: "Vowels",
Company: "ACME",
JobTitle: "Marine electronics technician",
BusinessPhone: "5593346999",
HomePhone: "5468546525",
MobilePhone: "8525646587",
FaxNumber: "9785465854",
Street: "600 Caisson Hill Road ",
City: "Smoky Hill",
State: "Texas",
Country: "USA",
Email: "PamelaJCallaghan@rhyta.com",
WebPage: "JesseAIrvine.dayrep.com",
Notes: " "
},
我们现在有一个工厂方法架构供控制器使用。模板代码如下所示
var tenantService = function () {
var tenantFactory = {};
......
return tenantFactory;
};
app.factory("tenantService", tenantService);
这允许控制器像具有属性和方法的模块一样使用 tenantService
。
在我们的工厂方法中,我们有控制器在我们的应用程序中使用的函数,我在此处包含代码
var tenantService = function () {
var tenantFactory = {};
tenantFactory.getTenant = function (index) {
var returnTenant = [];
if (tenantFactory.isOverflow(index))
{
index = 0;
}
returnTenant.push(tenant[index]);
return returnTenant;
};
tenantFactory.isOverflow = function (index){
return (tenant.length <= index)
};
tenantFactory.addTenant = function (index) {
var returnTenant = [];
var newIndex = tenant.length + 1;
tenant.push(tenantFactory.newItem(newIndex));
returnTenant.push(tenant[tenant.length -1]);
return (returnTenant)
};
tenantFactory.deleteTenant = function (index) {
var returnTenant = [];
tenant.splice(index,1);
if (tenant.length <= index)
{
index = tenant.length -1;
}
returnTenant.push(tenant[index]);
return (returnTenant)
};
tenantFactory.newItem = function (index) {
var newItem = {
Id: index,
FirstName: "",
LastName: "",
Company: "",
JobTitle: "",
BusinessPhone: "",
HomePhone: "",
MobilePhone: "",
FaxNumber: "",
Street: "",
City: "",
State: "",
Country: "",
Email: "",
WebPage: "",
Notes: ""
}
return newItem;
}
return tenantFactory;
};
组合在一起时,HTML 页面、控制器、服务和模块文件协同工作,可以在 Web 上启动一个可工作的应用程序,而无需繁重的 DOM 操作和意大利面条式代码。
我们创建了关注点分离,可以单独测试并编写可维护且组织良好的代码。
我希望你喜欢这个应用程序指南,并欣赏 AngularJS 及其出色的功能。将来,我将发布更多关于表单验证、多个视图和客户端服务器交互的文章。
历史
- 版本 1 5-15-2015