AngulaerJs

typora-root-url: img

AngularJs

AngularJS 应用组成(MVC)

  • View(视图), 即 HTML。
  • Model(模型), 当前视图中可用的数据。
  • Controller(控制器), 即 JavaScript 函数,可以添加或修改属性。

安装与使用

在页面head之间引入以下代码即可使用

<script src="//apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
  • 如果选择下载静态AngularJS文件,以下是下载地址
  • 官方文档所在 AngularJs官网

引入外部文件的方式

在大型的应用程序中,通常是把控制器存储在外部文件中。只需要把 标签中的代码复制到名为 personController.js 的外部文件中即可

<script src="personController.js"></script>

ng 指令汇总

1>常用指令

指令 功能
ng-init 为 AngularJS 应用程序定义了 初始值。
ng-model 创建对象(当然数组也是对象)
ng-repeat 遍历数组
ng-options 遍历对象
ng-show 对控件设置可见/不可见(修改的是value的值)
ng-hide 对控件设置不可见/可见(与上相反)
ng-disabled 设置控件无效(按钮无效,字符不显示)
ng-include 在本页面包含进一个指定页面

2>自定义指令

自定义指令方法directive()

angular.module('myApp',[])  
            //自定义指令的方法directive  
            //第一个参数是指令名称  
            //第二个参数是个function,返回设置指令属性的对象  
            .directive('userList',function(){  
                return {  
                    restrict:'ECA',  
                    template:'<ul><li ng-repeat="user in users">{{ user.id }} {{ user.name}}                            </li></ul>',  
                    replace:true  
                }  
            })  
            .controller('myCtrl',['$scope',function($scope){  
                $scope.users=[  
                    {id:12,name:'张三'},  
                    {id:15,name:'李四'},  
                    {id:18,name:'王五'}  
                ]  
            }])  

<div ng-app="myApp" ng-controller="myCtrl">  
    <user-list></user-list>  
</div>  
//或者
<div class="user-list"></div>
//或者
<div user-list></div> 

使用template指令可以返回所指定格式的dom内容

上面的上面的代码的restrict:’ECA’

  • E(element):
  • C(class):
  • A(attribute):

    replace如果为true,则标签不再生成

其实就是自定义标签,有一个要注意的地方就是创建的指令是userList的,在页面应该用


$scope

  • Scope(作用域) 是应用在 视图和 控制器 之间的纽带。
  • Scope 可应用在视图和控制器上。
  • Scope 是一个js对象,有可用的方法和属性。

    {{greeting}}

    angular.module(‘myApp’, []).controller(‘myCtrl’, function(scope) { scope) { scope.greeting = “hu”
    })

使用视图的时候,不需要加{{$scope}.name},而是直接用{{name}}即可.

1>根作用域

所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。

<div ng-app="myApp" ng-controller="myCtrl">

<h1>{{lastname}} 家族成员:</h1>

<ul>
    <li ng-repeat="x in names">{{x}} {{lastname}}</li>
</ul>

</div>

var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope, $rootScope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
    $rootScope.lastname = "Refsnes";
});

结果:


AngularJs控制器

  • AngularJS 控制器在
    内由 ng-controller 指令定义
  • AngularJS 控制器 控制 AngularJS 应用程序的数据。
  • AngularJS 控制器是常规的 JavaScript 对象。

    app.controller(‘myCtrl’, function(scope) { scope) { scope.firstName = “John”;
    $scope.lastName = “Doe”;
    });

1>控制器也可以有方法

app.controller('myCtrl', function($scope) {
$scope.fullName = function() {
        return $scope.firstName + " " + $scope.lastName;
    }
});

angularJs过滤器

AngularJS 过滤器可以用来格式化数据,过滤器能够用在表达式和指令中。例{{lastName | uppercase}}

过滤器 描述
currency 格式化数字为货币格式。
filter 从数组项中选择一个子集。
lowercase 格式化字符串为小写。
orderBy 根据某个表达式排列数组。例如根据年龄升序/降序
uppercase 格式化字符串为大写。

1>orderBy排序

<div ng-app="myApp" ng-controller="namesCtrl">

<p>循环对象:</p>
<ul>
  <li ng-repeat="x in names | orderBy:'age'">
    {{ x.name + ', ' + x.age }}
  </li>
</ul>

</div>

var app = angular.module('myApp', []);

app.controller('namesCtrl', function($scope) {
    $scope.names = [
                {"name":"张三","age":2},
                {"name":"李四","age":3},
                {"name":"哇嘎","age":1},
                {"name":"网二","age":4}]
});

结果:


AngularJs服务

在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。

使用时将服务写在controller方法的参数最后


1>$location服务

获取当前的完整地址

var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $location) {
    //注意 $location 服务是作为一个参数传递到 controller 中。如果要使用它,需要在 controller 中定义。
    $scope.myUrl = $location.absUrl();
});

\

2>$http服务

<div ng-app="myApp" ng-controller="myCtrl">
    {{myWelcome}}
</div>



var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
  $http.get("https://www.w3cschool.cn/statics/demosource/Customers_JSON.php").then(function (response) {
      $scope.myWelcome = response.data;
  });
});

用于发送http请求,并操作返回结果

3>$timeout计时服务和 interval迭代服务

两秒之后替换文字

$timeout(function () {
        $scope.myHeader = "How are you today?";
    }, 2000)

每隔一秒重复刷新时间

  $interval(function () {
        $scope.theTime = new Date().toLocaleTimeString();
    }, 1000);

自定义服务Service

1>定义服务

app.service('hexafy', [function() {
    function myFunc(x) {
        return x.toString(16);
    }
}]);

2>控制器调用服务

app.controller('myCtrl', function($scope, hexafy) {
    $scope.hex = hexafy.myFunc(255);
});

3>过滤器调用服务

<div ng-app="myApp">
    <h1>{{255 | myFormat}}</h1>
</div>

app.filter('myFormat',['hexafy',function(hexafy){
    return function(x){
        return hexafy.myFunc(x);
    }
}]

AngularJs 字符与 Json数据转换

1>json格式

格式 结果
json字符串格式 var json = ‘{“name”:”liSi”, “password”:”321”}’;
json数组字符串格式 var jsonArr = ‘[{“name”:”zhangSan”, “password”:”123”},{“name”:”liSi”, “password”:”321”}]’;
数组 var arr[] = [1,2,3];

//如果需要json对象
var json = {"name":"hu","psw":"123"};//这个json是json对象,不需要转换
var json = '{"name":"hu","psw":"123"}';//这个json字符串,需要转换(多了个'')

1>字符转JSON格式

var jsonObject = angular.fromJson(String);

2>json转String

var String = angualr.toJson(JsonObject);

AngularJs事件

ng-click点击事件


AngularJs模块

通常将所有的模型文件放在 *App.js中

将所有的控制器文件放在*Controller.js中

将所有的服务文件放在*Service.js中

AngularJs表单验证

需要条件

  • form上面一定要有一个name属性,最好再加一个novalidate=”novalidate”
  • form之中不能有action属性
  • 每个input标签都应该有ng-model

    标签属性 功能
    required(格式) 验证是否已输入文字
    ng-minlength=“{numbr}” 验证至少输入{number}个字
    ng-maxlength=“{number} 验证至多输入{number}个字符
    ng-pattern=”/PATTERN/” 确保输入匹配一个正则表达式


AngularJs BootStrap

实例分析 简单的用户编辑功能

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="//apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="//apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="userCtrl">

<div class="container">

<h3>Users</h3>

<table class="table table-striped">
  <thead>
    <tr>
      <th>编辑</th>
      <th>名</th>
      <th>姓</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="user in users">
      <td>
        <button class="btn" ng-click="editUser(user.id)">
          <span class="glyphicon glyphicon-pencil"></span>编辑
        </button>
      </td>
      <td>{{ user.fName }}</td>
      <td>{{ user.lName }}</td>
    </tr>
  </tbody>
</table>

<hr>
<button class="btn btn-success" ng-click="editUser('new')">
<span class="glyphicon glyphicon-user"></span>创建新用户
</button>
<hr>

<h3 ng-show="edit">创建新用户:</h3>
<h3 ng-hide="edit">编辑用户:</h3>

<form class="form-horizontal">
  <div class="form-group">
    <label class="col-sm-2 control-label">名:</label>
    <div class="col-sm-10">
    <input type="text" ng-model="fName" ng-disabled="!edit" placeholder="名">
    </div>
  </div> 
  <div class="form-group">
    <label class="col-sm-2 control-label">姓:</label>
    <div class="col-sm-10">
    <input type="text" ng-model="lName" ng-disabled="!edit" placeholder="姓">
    </div>
  </div>
  <div class="form-group">
    <label class="col-sm-2 control-label">密码:</label>
    <div class="col-sm-10">
    <input type="password" ng-model="passw1" placeholder="密码">
    </div>
  </div>
  <div class="form-group">
    <label class="col-sm-2 control-label">重复密码:</label>
    <div class="col-sm-10">
    <input type="password" ng-model="passw2" placeholder="重复密码">
    </div>
  </div>
</form>

<hr>
<button class="btn btn-success" ng-disabled="error || incomplete">
<span class="glyphicon glyphicon-save"></span>修改
</button>

</div>

<script >
angular.module('myApp', []).controller('userCtrl', function($scope) {
$scope.fName = '';
$scope.lName = '';
$scope.passw1 = '';
$scope.passw2 = '';
$scope.users = [
{id:1, fName:'Hege',lName:"Pege" },
{id:2, fName:'Kim',lName:"Pim" },
{id:3, fName:'Sal',lName:"Smith" },
{id:4, fName:'Jack',lName:"Jones" },
{id:5, fName:'John',lName:"Doe" },
{id:6, fName:'Wang',lName:"Loen" }
];
$scope.edit = true;
$scope.error = false;
$scope.incomplete = false; 
$scope.editUser = function(id) {
  if (id == 'new') {
    $scope.edit = true;
    $scope.incomplete = true;
    $scope.fName = '';
    $scope.lName = '';
    } else {
    $scope.edit = false;
    $scope.fName = $scope.users[id-1].fName;
    $scope.lName = $scope.users[id-1].lName; 
  }
};

$scope.$watch('passw1',function() {$scope.test();});
$scope.$watch('passw2',function() {$scope.test();});
$scope.$watch('fName',function() {$scope.test();});
$scope.$watch('lName',function() {$scope.test();});

$scope.test = function() {
  if ($scope.passw1 !== $scope.passw2) {
    $scope.error = true;
    } else {
    $scope.error = false;
  }
  $scope.incomplete = false;
  if ($scope.edit && (!$scope.fName.length ||
    !$scope.lName.length ||
    !$scope.passw1.length || !$scope.passw2.length)) {
    $scope.incomplete = true;
  }
};
})

</script>

</body>
</html>

判定表单的内容 incomplete 或者 error其中一个为false,则提交按钮无法使用(关键分析这个功能)

AngularJS 指令 描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值