前端框架之----Angular

AngularJS是一个为动态web应用设计的结构框架,提供了一种新的开发应用方式,可以在web应用程序中使用HTML声明动态内容。Angular是由Google团队来维护的。
下面来介绍一下Angular的特点
1、功能性
通过一个独立的框架就可以构建动态、交互密集型的客户端应用。
2、MVC,即 Model View Controller
模型、视图和控制器(逻辑应用)
3、依赖注入
AngularJS拥有内建的依赖注入子系统,可以帮助开发人员更容易开发,理解和测试应用。
4、双向数据绑定
通过强大的双向数据绑定功能,实现了把model与view完全绑定在一起,model变化,view也变化。

使用AngularJS的方便之处:

  • 前后端分离,后端只提供数据接口,路由,模板渲染等都在前端完成
  • html和js分离,展示和逻辑分离
  • 减少js代码,减少DOM元素查找,事件绑定等代码
  • 适合API开发(Application Programming Interface,[应用程序编程接口])

下面将介绍AngularJS的具体的使用

首先,使用时我们要先引入Angular脚本。

1、内置指令

凡是以ng- 开头的,都称为内置指令。
ng-app=" "
用于表示一个angular应用,Angular会从ng-app 所在标签开始管理这个应用,一般一个页面只有一个。不传参数时表示使用默认的Angular应用。通常写在html或body上。

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

ng-init
该指令用来初始化一些数据,这些数据会挂载到根目录上,实际开发中,我们不会再这里初始化数据,会将数据挂载到Controller即控制器上。

<div ng-init=" name='zhar' "></div>

ng-model
用以将视图与模型进行双向绑定(通常用来绑定输入框和页面展示的内容的绑定)
ng-repeat
遍历数组:ng-repeat="x in arr"
遍历对象:ng-repeat="(key,val) in obj"

        <div ng-init="arr=['a','b','c']">
             <input type="text" ng-model="arr">
             <ul>
                <li ng-repeat="x in arr">{{ x }}</li>
             </ul>
        </div>

值得注意的是,当数组里有相同的值时,导致angular无法跟踪对应的值,需要使用track by $index让Angular根据下标来遍历。

 <h1 ng-repeat="x in as track by $index">{{x}}</h1>

ng-bind
将模型数据输出到页面,可以解决脚本还能引入时,{{ }}按原样输出的问题。

除此之外,还有:
ng-class 为元素指定样式名
ng-class="{true:'class1',false:'class2'}[bol]" 由 bol 决定添加哪个样式
ng-class="{'class1':bol1,'class2':bol2,'classN':bolN}"由各个变量 决定是否添加指定的样式
ng-style 为元素添加样式
ng-style="{style1:style,...}"
ng-show 是否显示元素 true 显示 false 隐藏
ng-show 为 false时,只是为元素添加一个优先级最高的 display:none
ng-if 是否显示元素
ng-if 为 false 时,会将元素从 DOM 树中移除
ng-src 为图片添加路径

2、控制器

我们通常在控制器里声明一些数据和方法,声明方法:

  • angular.module( moduleName[,depends]) 创建或获取模块
  • moduleName : 模块名称 String
  • depends : 依赖的其它模块 Array
  • 当只传入一个名称时,代表获取指定的模块
  • 两个参数时,定义模块,即使不依赖其它模块,也要传入一个空的数组
        var app = angular.module("myApp",[]);

        //推断式注入
        app.controller("myController",function($scope){
            $scope.name = "zhar";
        })
        //声明式注入
        //建议一律使用这种方式,代码压缩混淆后,依然能正常运行
        //数组的 0 到 倒数第二项 是该控制需要注入的模块,
        //最后一项是回调函数
        app.controller("myController2",["$scope",function($scope){
            $scope.name = "tom";
            $scope.arr = [1,2,3,4]
        }])

各个控制器之间的内容是不能互相访问的,子级可以访问父级控制器的数据。

3、过滤器

过滤器,顾名思义就是数据渲染时我们可以加一些条件限制和过滤。使用方法就是竖杠+空格+过滤器名+冒号+需要的参数。代码:

<h3 ng-repeat="item in items | orderBy:orderKey:isDown">{{item.name+"-"+item.price}}</h3>
<h3 ng-repeat="item in items | myFilter3:searchKey">{{item.name}}</h3>

下面介绍一个内置的过滤器:

  • currency 货币格式转换
  • currency:"前缀"  更改指定的前缀 默认为 $
    
  • lowercase | uppercase 大小写转换
  • date 日期格式化
  • y 年  M 月  d 日  H 24时  h 12时  m 分钟  s 秒
    
  • 数组过滤器:
  • limitTo 限制结果条数 如:limitTo:2 显示两条
  • orderBy 排序
  • orderBy:orderKey 按 orderKey升序排列
    
  • orderBy:orderKey:true  按 orderKey降序排列
    
  • filter 按关键字快速过滤
  • filter:searchKey 过滤所有数据包含 searchKey的内容
    

实例代码如下:

app.filter("myFilter3", function () {
            return function (val, arg1) {
//其中,第一个参数为默认值,展示的数据数组,第二个为searchKey
                // console.log(arg1);
                var arr = [];
                val.forEach(function (item) {
                    if (item.name.indexOf(arg1) != -1) {
                        arr.push(item);
                    }
                })
                return arr;
            }
        });

4、脏查询

脏查询机制($digest):每当有一个数据发生变化,就会触发脏查询,去遍历$watcherlist,如果发现这个值前后不相等,就会标记一个脏,并用新的值去替换旧的值,然后再一次遍历,对比值知否相等,最后再渲染视图。

5、$http

我们可以用该方法来请求数据,代码如下:

        var app = angular.module("myApp",[]);
        app.controller("myController",["$scope","$http",function ($scope,$http) {
            $scope.items = [];
            //$http.get()  返回一个 promise 对象
            //success 和 err 只是语法糖,是对 then() 封装
            $http.get("./data.json").success(function (res) {
                console.log(res);
            })
        }])

6、路由

我们可以通过路由来实现页面内的跳转。首先,配置路由规则需要在config 阶段,然后需要依赖$stateProvider,和urlRouterProvider两个模块,下面是代码示例:

angular.module("myApp")
.config([
    "$stateProvider","$urlRouterProvider",
    function ($stateProvider,$urlRouterProvider) {
        //配置规则
        $stateProvider.state("home",{
            url : "/home",
            templateUrl : "./views/home.html",
            controller : "homeController"
        }).state("mine",{
            url : "/mine",
            template : "<h1>个人中心</h1>"
        }).state("items",{
            url : "/items",
            template : "<h1>商品展示</h1>"
        }).state("home.a",{
            url : "/a",
            template : "<h1>这是home下的A</h1>"
        }).state("home.b",{
            url : "/b",
            template : "<h1>这是home下的B</h1>"
        })
    }]);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341

推荐阅读更多精彩内容