初学AngularJS

   简  介

HaHaHa

 

AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。

 

AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。

 

 

 AngularJS常用指令

1、ng-app:声明Angular所管辖的区域。一般写在body或html上,原则上一个页面只有一个;
<body ng-app=""></body>
 
2、ng-model:把元素值(比如输入域的值)绑定到应用程序的变量中。
<input type="text" ng-model="name"/>
 
3、ng-bind:把应用程序变量中的数据绑定到 HTML视图中。可用表达式{{ }}替代;
<div ng-bind="name"></div>
<div>{{name}}</div>
 
4、ng-init:初始化 AngularJS应用程序中的变量。
<body ng-app="" ng-init="name=123">
 
5、表达式: {{}} 绑定表达式,可以包含文字、运算符和变量。但表达式在网页加载瞬间会看到{{}},所以可以用ng-bind=""替代
{{ 5 +""+ 5 + ',Angular'}}
 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>AngularJS入门</title>
    </head>
    <body ng-app="" ng-init="name=123">
        
        <input type="text" id="input" ng-model="name"/>
        <div id="div" ng-bind="name+',Angular'">{{name}}</div>
        
        <input type="text" id="input2" ng-model="name"/>
        
        
        <p>我的第一个表达式: {{ 5 +""+ 5 + ',Angular'}}</p>
        
        
    </body>
    
    
    <script src="libs/jquery-3.1.1.js"></script>
    <script src="libs/angular.js"></script>
    
    <script type="text/javascript">
    </script>
    
</html>

 

 
2 MVC三层构架

1、Model(模型):应用程序中用于处理数据的部分。(保存或修改数据到数据库、变量等)。AngularJS中的Model特指的是:数据

 

  View(视图):用户看到的用于显示数据的页面;

  

  Controller(控制器):应用程序中处理用户交互的部分。负责从视图读取数据,控制用户输入,并向模型发送数据。

  

2、工作原理: 用户从视图层发出请求,controller接收到请求后转发给对应的model处理,model处理完成后返回结果给controller,并在view层反馈给用户。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    
    <body ng-app="myApp" >
        
        <div ng-controller="myCtrl">
            <input type="text" ng-model="name"/>
            <div ng-bind="name"></div>
            <div ng-bind="classes.name"></div>
        </div>
        
        <div ng-controller="myCtrl1">
            <div ng-bind="age"></div>
            <div ng-bind="name"></div>
        </div>
        
        <div ng-bind="age"></div>
        <div ng-bind="name"></div>
    </body>

    <script src="libs/angular.js"></script>
    
    <script type="text/javascript">
        app.controller("myCtrl",function($scope,$rootScope){
            //$scope.name = "jianghao";
            $rootScope.age = 14;
            $scope.classes = {
                name:"H51701",
                num:"33"
            };
        });
        
        app.controller("myCtrl1",function(){
            
        });
    </script>
</html>

 

3 过滤器

  AngularJS中,过滤器可以使用一个管道字符(|)添加到表达式和指令中。

>>> 系统内置过滤器:

currency格式化数字为货币格式。

filter从数组项中选择一个子集。

lowercase格式化字符串为小写。

orderBy根据某个表达式排列数组。

uppercase格式化字符串为大写。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="libs/bootstrap.css" />
    </head>
    
    <body ng-app="app" ng-controller="ctrl">
        
        <p>{{"aBcDeF"|uppercase}}</p>
        <p>{{"aBcDeF"|lowercase}}</p>
        <p>{{123456|currency}}</p>
        <form class="form-horizontal">
            
        </form>
        <div class="form-group">
            <label>请输入筛选信息:</label>
            <input type="text" ng-model="search" />
        </div>
        
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>年龄</th>
                    <th>成绩</th>
                </tr>
            </thead>
            <tr ng-repeat="item in classes| filter:search | orderBy:'score'">
                <td>{{item.name}}</td>
                <td>{{item.age}}</td>
                <td>{{item.score}}</td>
            </tr>
        </table>
        
        <p>{{"123456"|reverse}}</p>
        
        
    </body>
    <script src="libs/angular.js"></script>
    <script>
        angular.module("app",[])
        .controller("ctrl",function($scope){
            $scope.classes = [
                {name:"张二",age:"12",score:"88"},
                {name:"张三",age:"12",score:"88"},
                {name:"李四",age:"15",score:"78"},
                {name:"李五",age:"15",score:"78"},
                {name:"王大麻子",age:"18",score:"98"},
                {name:"王二麻子",age:"18",score:"98"}
            ];
            
            
        })
        /*
         * 自定义过滤器
         */
        .filter('reverse', function() {
            
            return function(text) {
                if(!angular.isString(text)){
                    return "您输入的内容不是字符串";
                }else{
                    return text.split("").reverse().join("");
                }
                
            }
        })
        
    </script>
</html>

 

 

4 服务

 【自定义服务provide】

1、在AngularJS中,Service,factory都是基于provider实现的。

2、在provider中,通过$get()方法提供了factory的写法,用于返回 value/service/factory。;

3、provider是三种自定义服务中,唯一可以写进config配置阶段的一种。

 

如果服务,必须要在配置阶段执行,那么必须使用provider。否则,一般使用Service或factory

【自定义服务factory】

factory 是一个函数用于返回值,通常我们使用 factory 函数来计算或返回值。(factory使用上,与service差距不大)

【服务Service】

1、内置服务:

  >>> 使用内置服务,必须在Controller中通过函数的参数注入进来!!!!!

$location:返回当前页面的 URL地址。

$http:向服务器发送请求,应用响应服务器传送过来的数据,类似于Ajax

$timeout:相当于setTimeout();

 $interval:相当于setInterval();

5 $http

 $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。

AngularJS $http 是一个用于读取web服务器上数据的服务。

 

$http.get(url) 是用于读取服务器数据的函数。

var app = angular.module('myApp', []);
    
app.controller('siteCtrl', function($scope, $http) {
    $http({
        method: 'GET',
        url: 'https://www.runoob.com/try/angularjs/data/sites.php'
    }).then(function successCallback(response) {
            $scope.names = response.data.sites;
        }, function errorCallback(response) {
            // 请求失败执行代码
    });
  
});

 

6 select与表格

 使用数组作为数据源。

其中,x表示数组的每一项。

默认会将x直接绑定到option的value中。

而option显示的内容,有前面的x for... 决定

使用对象作为数据源.

其中,(x,y)表示键值对,x为键,y为值。

默认会将值y绑定到option的value中.

而option显示的内容,有前面的x for... 决定

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="libs/bootstrap.css" />
        <style type="text/css">
            *{
                margin: 10px;
            }
        </style>
    </head>
    
    <body ng-app="app" ng-controller="ctrl">
        <!--<select ng-model="name">
            <option ng-repeat="item in options" >{{item}}</option>
        </select>-->
        
        <!--<select ng-model="name">
            <option ng-repeat="item in sites" value="{{item.url}}">{{item.site}}</option>
        </select>-->
        
        <select ng-model="name" ng-options="x for (x, y) in sites">
        </select>
        
        <div class="alert alert-info" style="width: 300px;">
            您选择的是:{{name}}
        </div>
        
        <table class="table table-bordered">
            <tr>
                <th>序号</th>
                <th>姓名</th>
            </tr>
            <tr ng-repeat="item in options">
                <td>{{$index +1}}</td><!--$index 表示遍历的索引,从0开始-->
                <td>{{item}}</td>
            </tr>
        </table>
        
    </body>
    <script src="libs/angular.js"></script>
    <script>
        /* 
         * 
         */
        angular.module("app",[])
        .controller("ctrl",function($scope){
            $scope.options = ["张三","李四","王二麻子","杰小瑞"];
            
//            $scope.sites = [
//                {site : "Google", url : "http://www.google.com"},
//                {site : "Runoob", url : "http://www.runoob.com"},
//                {site : "Taobao", url : "http://www.taobao.com"}
//            ];

            $scope.sites = {
                site01 : "Google",
                site02 : "Runoob",
                site03 : "Taobao"
            };
            
        })
        
        
        
        
    </script>
</html>

 

7 输入验证

[AngularJS中的表单验证]

1、表单中,常用的验证操作:

  $dirty  表单有填写记录

  $valid  字段内容合法的

           $invalid  字段内容是非法的

           $pristine 表单没有填写记录

           $error    表单验证不通过的错误信息

        

        2、验证时,需给表单,及需要验证的input,设置name属性:

                       给form及input设置name后,会将form表单信息,默认绑定到$scope作用域中。故,可以使用 formName.inputName.$验证操作 得到验证结果:

                      例如:formName.inputName.$dirty = "true" 表单被填写过

                formName.inputName.$invalid = "true" 表单输入不合法

                formName.inputName.$error.required = "true" 表单必填但未填

                $error支持的验证有:required/minlength/maxlength/pattern/email/number/date/url等。。。

           

3、为避免冲突,例如使用type="email"时,H5也会进行验证操作。如果只想使用AngularJS验证,可以使用<form novalidate></form>属性,禁用H5自带验证功能;

<!DOCTYPE html>
<html>
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<body>

<h2>Validation Example</h2>

<form  ng-app="myApp"  ng-controller="validateCtrl"
name="myForm" novalidate>

<p>用户名:<br>
  <input type="text" name="user" ng-model="user" required>
  <span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid">
  <span ng-show="myForm.user.$error.required">用户名是必须的。</span>
  </span>
</p>

<p>邮箱:<br>
  <input type="email" name="email" ng-model="email" required>
  <span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid">
  <span ng-show="myForm.email.$error.required">邮箱是必须的。</span>
  <span ng-show="myForm.email.$error.email">非法的邮箱。</span>
  </span>
</p>

<p>
  <input type="submit"
  ng-disabled="myForm.user.$dirty && myForm.user.$invalid ||
  myForm.email.$dirty && myForm.email.$invalid">
</p>

</form>

<script>
var app = angular.module('myApp', []);
app.controller('validateCtrl', function($scope) {
    $scope.user = 'John Doe';
    $scope.email = 'john.doe@gmail.com';
});
</script>

</body>
</html>

 

posted on 2017-05-08 08:17  c-c-c  阅读(168)  评论(0编辑  收藏  举报