带你走近AngularJS系列:

  1. 带你走近AngularJS - 基本功能介绍
  2. 带你走近AngularJS - 体验指令实例
  3. 带你走近AngularJS - 创建自定义指令

------------------------------------------------------------------------------------------------

AngularJS是Google推出的一款Web应用开发框架。它提供了一系列兼容性良好并且可扩展的服务,包括数据绑定、DOM操作、MVC设计模式和模块加载等。本文专注于AngularJS 指令的使用,在我们进入主题之前,我们将快速浏览AngularJS的基本用法。

AngularJS 不仅仅是一个类库,而是提供了一个完整的框架。它避免了您和多个类库交互,需要熟悉多套接口的繁琐工作。它由Google Chrome的开发人员设计,引领着下一代Web应用开发。也许我们5年或10年后不会使用AngularJS,但是它的设计精髓将会一直被沿用。

了解AngularJS的开发人员,你肯定会为AngularJS自定义指令(它的功能相当于.NET 平台下的自定义控件)功能感到兴奋。自定义指令允许你扩展HTML标签和特性。指令可以复用并且可以跨项目使用。

自定义指令已经得到了广泛的应用,其中值得一提的是-Wijmo控件集。它包含了近50款基于AngularJS 控件。Wijmo是用于创建桌面和移动Web应用程序的HTML5前端控件集。从交互式图表到强大的表格控件,Wijmo几乎包含了我们所需要的一切。可以从官网了解Wijmo的更多信息。所以,Wijmo是学习AngularJS很好的参考示例:AngularJS Directive Gallery

创建自定义指令是非常容易的。指令可以测试、维护并且在多个项目中复用。

使用AngularJS, 需要在HTML页面引用脚本文件,给HTML或Body标签添加ng-app 特性。下面是一个使用AngularJS的简单实例:

<html><head><script src="http://code.angularjs.org/angular-1.0.1.js"></script></head><body ng-app ng-init="msg = '葡萄城控件团队博客'"><input ng-model="msg" /><p>{{msg}}</p></body>
</html>

当AngularJS 加载后,它会在文档中搜索ng-app 特性。这个标签通常被设置给项目的主要模块。一旦发现,Angular 就会对文档进行操作。

在这个例子中,ng-init 特性初始化了一个msg 变量“葡萄城控件团队博客”, ng-model 特性把它和input 控件进行了双向绑定(注意:大括号是绑定的标记)。AngularJS 会解析这个标记,随着input值改变实时更新msg 文本值。可以从链接查看效果:点击进入

AngularJS 模块

模块可以说是AngularJS 的根本。它包含配置、控制、过滤、工厂模式、指令及其它模块。

如果你熟悉.NET平台,但初步学习Angular。下面的表格是一个简要的对比,帮助你理解Angular中的角色扮演情况:

AngularJS

.NET

摘要

module

Assembly

应用开发模块

controller

ViewModel

控制器,启到不同层面间的组织作用

scope

DataContext

为视图提供绑定数据

filter

ValueConverter

数据传输到视图之前修改数据

directive

Component

可复用的UI元素,也可以理解为前端插件

factory, service

Utility classes

为其他模块元素提供服务

例如,下面的代码使用控制器、过滤器和指令创建了一个模块:

// the main (app) module
var myApp = angular.module("myApp", []);// add a controller
myApp.controller("myCtrl", function($scope) {$scope.msg = "grapecity team blog";
});// add a filter
myApp.filter("myUpperFilter", function() {return function(input) {return input.toUpperCase();}
});// add a directive
myApp.directive("myDctv", function() {return function(scope, element, attrs) {element.bind("mouseenter", function() {element.css("background", "yellow");});            element.bind("mouseleave", function() {element.css("background", "none");});            }
});

上面示例中module 方法的第一个参数为模块的名称,第二个参数为它的依赖模块列表。我们创建了一个独立的模块,不依赖于其它模块。所以第二个参数为空数组(注意:即使它为空,我们也必须填写这个参数。否则,该方法回去检索之前的同名模块)。这部分我们将在后续的文章中详细阐述。

controller 构造函数获取$scope 对象,用于存储所有controller 暴露的接口和方法。scope 由Angular 传递到视图和指令层。在这个例子中, controller 添加了msg 属性给scope对象。一个应用模块可以包含多个controller,每个controller各司其职,控制一个或多个视图。

filter 构造函数返回一个方法用于更改input文本的显示方式。Angular 提供很多内置的filter,同时,你也可以添加自定义filter,操作方式Angular内置filter相同。在这个例子中,实现了小写到大写的转换。Filter不仅可以格式化文本值,还可以更改数组。AngularJS 内置的格式化Filter有number、date、currency、uppercase和lowercase。数组 filter有filter、orderBy和 limitTo。Filter需要设置参数,语法格式也是固定的: someValue |filterName:filterParameter1:filterParameter2....

directive 构造函数返回了一个方法,该方法用于传递一个元素,并依据scope中的参数对其进行修改。示例中我们绑定了mouseenter 和mouseleave 事件用于切换文本高亮显示。这是一个功能简单的指令,在后续的章节将展示如何创建一些复杂指令。

下面是使用模块构建的页面:

<body ng-app="myApp" ng-controller="myCtrl"><input ng-model="msg" /><p my-dctv >{{msg | myUpperFilter }}</p>
</body>

可以从链接查看效果:点击进入

注意应用中module、controller和filter 作为特性值应用。它们代表JavaScript 对象,因此名称是区分大小写的。指令的名称同样也是属性值,它作为HTML标签被解析,所以也是区分大小写的。但AngularJS 会自动转换这些特性为小写,例如“myDctv" 指令变成"my-dctv" (就像内置的指令ngApp, ngController, 和ngModel会转换成 "ng-app", "ng-controller", 和"ng-model"。

项目组织结构

使用AngularJS 可以创建大型Web项目。你可以把项目拆分为多个模块,把一个模块拆分为多个模块文件。同时,可以按照你的使用习惯组织这些文件。

列举一个典型的项目结构:

Root
        default.html
        styles
               app.css
        partials
               home.html
               product.html
               store.html
        scripts
               app.js
               controllers
                       productCtrl.js
                       storeCtrl.js
               directives
                       gridDctv.js
                       chartDctv.js
               filters
                       formatFilter.js
               services
                       dataSvc.js
               vendor
                       angular.js
                       angular.min.js

假设如果你仅希望项目中使用一个模块,你可以如此定义:

// app.js

angular.module("appModule", []);

如果希望在模块中添加元素,你可以通过名称调用模块向其中添加。例如: formatFilter.js 文件包含以下元素:

// formatFilter.js
// 通过名称获取模块
var app = angular.module("appModule");// 向模块中添加filter
app.filter("formatFilter", function() {return function(input, format) {return Globalize.format(input, format);}
}})

如果你的应用包含多个模块,注意在添加模块时添加其它模块的引用。例如,一个应用包含三个模块app、controls、和data :

// app.js (名称为app的模块依赖于controls和data模块)
angular.module("app", [ "controls", "data"])// controls.js (controls 模块依赖于data 模块)
angular.module("controls", [ "data" ])// data.js (data 模块没有依赖项,数组为空)
angular.module("data", [])

应用的主页面中需要声明ng-app 指令, AngularJS 会自动添加需要的引用:

<html ng-app="app">
...
</html>

进行以上声明后,你就可以在所有的页面中使用其它三个模块声明的元素了。

这篇文章中我们了解了AngularJS的基本使用方法及结构。在下一个章节中,我们将阐述基本的指令概念,同时,会创建一些实例来帮助你加深指令作用的理解。

相关阅读:

开放才能进步!Angular和Wijmo一起走过的日子

Angular vs React 最全面深入对比

Wijmo已率先支持Angular4 & TypeScript 2.2

带你走近AngularJS - 基本功能介绍相关推荐

  1. 带你走近AngularJS - 创建自定义指令

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...

  2. TYPEC 转HDMI VGA+PD+ USB3.0 HUB+TF/CF/SD+RJ45等多功能扩展坞方案设计资料|TYPE-C转HDMI转VGA带PD USB3.0多功能拓展器方案介绍

    如何对TYPE-C转HDMI转VGA多功能扩展坞或者拓展器选择一款有效且低成本的方案?针对这一命题,我们选择一款芯片AG9321MCQ来实现设计,且这款方案是Algoltek安格科技 在2020年针对 ...

  3. tek示波器软件_泰克示波器自带上位机软件功能介绍

    原标题:泰克示波器自带上位机软件功能介绍 有人问,仪器背后那么多程控接口,为什么平时大家都只手动设置调试,从来没见过它们派上用场呢?今天安泰测试马工就给大家介绍一下电子工程师常用的仪器--泰克示波器的 ...

  4. dst发育筛查有意义吗_班护-带您走近DDST发育筛查测验

    发育健康稳定的孩子,如同一台好电脑,既能存储更多的东西,也能处理更多的程序:发育不良的孩子,就如同一台陈旧的电脑,运行起来很卡,反应很慢,做什么事情都慢半拍. 但是,发育筛查测验是个很复杂的过程,包括 ...

  5. HiCar基本功能介绍

    HiCar基本功能介绍 基本概述 一方面,基于操作系统超强的分布式能力,HUAWEI HiCar通过手机和汽车之间的连接,基于三层标准与能力,构建手机和汽车互助资源池,把手机的服务生态延伸到车内,实现 ...

  6. setsockopt()函数功能介绍

    setsockopt()函数功能介绍 功能描述:获取或者设置与某个套接字关联的选项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层. 用法: #include <sys/types.h ...

  7. YonBuilder直播预约第七期 | 一场直播带你走近规则链

    2022年的第一场直播来啦! 本期直播带你走近规则链.规则链,简而言之就是由多个规则组成的链条,每个规则可以看成是一段处理业务逻辑的代码. YonBuilder单据里的提交.保存.删除等系统命令都有自 ...

  8. 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)...

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  9. 鸿蒙os2.0系统什么时候,鸿蒙OS 2.0beta什么时候发布 鸿蒙OS2.0功能介绍

    鸿蒙OS 2.0beta什么时候发布呢?华为发布了面向全场景的分布式操作系统 HarmonyOS 2.0,宣布年底面向开发者发布智能手机 Beta 版本,下面就让小编给大家介绍一下. 鸿蒙OS 2.0 ...

最新文章

  1. 替换某个字符串_postman教程-10-如何在集合中快速查询和替换数据
  2. Perforce使用之创建DEPOT流程
  3. SpringBoot整合security的登录问题
  4. Linux各版本完整发展图
  5. 归并排序Merge sort(转)
  6. java map类转javabean_JavaBean和Map转换封装类的方法
  7. eda数字竞赛抢答器
  8. 游戏外挂的几种实现类型与方式
  9. windows7台式计算机网线连接,win7如何用一根网线连接两台电脑_一根网线怎样连接两台Win7电脑传输文件...
  10. Camera-ISP DP/DM/EE/NR/CR
  11. 又是一年金九银十!docker搭建ssr
  12. BOX3开发者工具使用说明
  13. 电报注册网络代理_如何在电报开放网络(TON)中开发和发布智能合约
  14. Activiti设置流程发起人用户信息
  15. Linux——》系统日志
  16. MVC中方便的[Authorize],加上这特性,就可以加上登录验证
  17. unity 学习笔记(改变物体旋转中心)
  18. jsp页面链接下载文件
  19. html在输入框添加叉叉,【部分解决】bootstrap 4中如何给输入框右边加上清除叉叉的按钮...
  20. x264中码率控制(一)

热门文章

  1. linux下编译安装ntfs,linux下编译安装ntfs
  2. linux关闭gvim命令,Linux 下 8 种退出 vim 编辑器的方法
  3. java基础知识复习
  4. 学计算机U盘内存,在U盘上设置虚拟内存
  5. java赋值运算符_11.Java赋值运算符
  6. 安装华为鸿蒙,魅族选择与鸿蒙合作,华为这下要成了?
  7. c语言之函数存储属性,C语言:链接属性与存储类型
  8. rsync android app,如何rsync到android
  9. Eclipse 插件用法:Eclipse 利用 Amateras UML 生成 Java 类图、时序图和 UML 类图
  10. linux python复制安装,复制一个Python全部环境到另一个环境,python另一个,导出此环境下安装的包...