带你走近AngularJS - 基本功能介绍

带你走近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

 

时间: 2024-09-30 06:34:45

带你走近AngularJS - 基本功能介绍的相关文章

带你走近AngularJS - 体验指令实例

带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------------------------------------------------------------------------------------------   之前我们已经介绍了所有的AngularJS 基础知识,下面让我们通过实例来加深记忆,体验自定义指令的乐趣. 手风琴指令 我们展示

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

带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------------------------------------------------------------------------------------------ 为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令.现今市场上的前端框架也只有Angu

Win8系统自带备份还原工具完整图文介绍

  在Win8系统中微软为大家内置了非常好用的系统备份还原工具,即使没有系统恢复光盘我们也可以轻松恢复系统.下面系小编就为大家带来Win8系统自带备份还原工具完整图文介绍. 1.首先,我们打开Win8系统控制面板,找到"Windows 7 文件恢复"(不要惊讶..就是这个功能) 2.双击进入后,出现如下界面: 3.选择"创建系统映像"; 4.此时可以选择将Win8的系统镜像备份在移动硬盘.在一张或多张DVD上或在网络上.根据系统的大小,若备份在光盘上需要多张光盘.

Visio2007新功能介绍

  Visio2007新功能介绍           提示:使用现有的数据,你可以生成许多种类的 Visio 标准图表,包括组织结构图.日程表.日历和甘特图.然而,本文讨论的新数据功能和增强的数据功能仅在 Office Visio Professional 2007 中提供,而在 Office Visio Standard 2007 中没有提供. Visio2007 快速入门 使用 Office Visio 2007 中新的"入门"窗口,便可找到所需的模板. 更简单的模板类别现在,由于

百度首页新版功能介绍

  今日登录百度,发现百度首页全新改版了,如下图所示,出现了"百度首页震撼升级,为你带来全新体验"的窗口提示,往下拉可以看到新版的相关介绍. 看完了引导后,正式进入百度首页,搜索框下面新增了导航.新闻.世界杯和音乐菜单,当然,用户也可以自由定制属于您的专属百度首页,下面为大家介绍新版的百度首页该怎么玩吧. 百度首页新版功能介绍: 终于等来如此高大上的绚丽百度首页!不知道怎么玩?那就实在太浪费了,现在开始动手,美美的装扮你的百度首页吧!一点一点看太麻烦?点击目录链接,一步到位! 1.宝箱

胡进勤:精密空调组网群控功能介绍

本文讲的是胡进勤:精密空调组网群控功能介绍 [IT168 资讯]由中国通信企业协会增值服务委员会主办,中国通信企业协会通信网络运维专业委员会与中国联通国家数据中心协办,中国IDC产业联盟网和C114中国通信网联合承办的"2010中国绿色数据中心发展与实践高峰论坛"将于9月16日在北京新世纪日航饭店隆重召开.It168 记者带来实时的精彩报道. 图:艾默生网络能源有限公司 空调技术专家胡进勤(大会直播专题) 演讲人简介: 胡进勤,艾默生网络能源技术专家.浙江大学制冷与低温研究所制冷专业硕

Edge浏览器新版功能介绍

  Edge浏览器新版功能介绍 Edge浏览器可以说是微软在Windows 10中提供给用户最大新特性之一,其功能与以往的任何一代IE浏览器相比都要更强. 现在,微软工程师们又将为Edge浏览器带来了新的内容. 微软今天宣布,Edge浏览器新添加WebM.VP9和Opus编码格式支持,用户在线体验多媒体内容将变得更加方便. 其中,WebM和VP9格式将能够提供更好的在线4K内容解码,能满足未来超高清在线娱乐需求. 目前,新格式支持已经在刚刚发布不久的Windows 10周年更新预览版中开启该功能

IE9新增了那些功能?IE9新功能介绍

IE9新功能介绍 简洁的设计 打开 Internet Explorer 9 时首先注意到的是紧凑的用户界面.大多数命令栏功能,如"打印"或"缩放",现在都可以通过单击"工具"按钮访问,单击"收藏夹"按钮时会显示您的收藏夹.此外,Internet Explorer 还为您提供了需要的基本控制,并让网页显示在正中.(如果要还原"命令"栏."收藏夹"栏和状态栏,请右键单击"新建选项卡

Excel 2010 中条件格式新增功能介绍

Excel 2010 中条件格式新增功能介绍这篇文章的内容如下: 下面介绍Excel 2010中一些新的条件格式功能: 交叉表引用 健壮的错误处理 性能增强 交叉表引用 在Excel 2010中,可以创建引用工作簿中不同工作表的条件格式.这意味着,在使用条件格式时,不再需要复制或链接数据到同一工作表. 例如,看看某连锁书店每月销售数据,该书店采用如下方式组织销售数据: 每个位置有自已的工作表 最后一个工作表包含全公司累计销售数据,使用每个部门的平均值. 下面我们应用条件格式,以便能够容易判断是否