前端框架之----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>"
        })
    }]);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容