angularjs 登峰系列3

1631 查看

angularjs指令系统

在之前的例子中,我们在html标签中认识了几个ng-的属性,比如ng-app, ng-controller,他们都是angularjs指令系统中的一员,在以后的学习中,我们还会遇到更多的指令系统,他们能够方便快捷的帮助我们实现很多功能。

MVVM

通俗来讲,就是数据改变,视图就改变,视图改变,数据也跟着改变,这就是双向改变的过程。在angular中

  • 数据 指的是js声明作用域的函数中,挂载在$scope上的变量的具体值

  • 视图 指的是在html中的{{}}中的变量的呈现效果

先来看一个数据改变视图的例子
在js中,setTimeout能够延迟实现,angular中也同样对setTimeout封装了一个叫做$timeout的属性,他的用法和setTimeout一致。

<!DOCTYPE html>
<html ng-app>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>Document</title>
    <link rel="stylesheet" href="bootstrap.css">
    <script src="angular.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row" ng-controller="R1">
        <h4>{{name}}</h4>        
    </div>
</div>
</body>
<script>
    function R1($scope, $timeout) {
        $scope.name = "young jake";
        $timeout(function() {
            $scope.name = "old jake";
        }, 2000);
    }
</script>
</html>

两秒之后,young jake 变成 old jake.

另外一个例子,点击button,input框中的数据发生变化

  • ng-click点击事件

<!DOCTYPE html>
<html ng-app>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>Document</title>
    <link rel="stylesheet" href="bootstrap.css">
    <script src="angular.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row" ng-controller="R1">
        <h4>{{name}}</h4>        
    </div>
    <div class="row" ng-controller="R2">
        <div class="input-group col-xs-6 col-xs-offset-3">
            <span class="input-group-btn" ng-click="text='after click.'">
                <button type="button" class="btn btn-default">Change!</button>
            </span>
            <input type="text" class="form-control" value="{{text}}">
        </div>
    </div>
</div>
</body>
<script>
    function R1($scope, $timeout) {
        $scope.name = "young jake";
        $timeout(function() {
            $scope.name = "old jake";
        }, 2000);
    }
    function R2($scope) {
        $scope.text = "this is a bootstrap input-group.";
    }
</script>
</html>

最后一个例子是视图改变数据的例子,在该例子中,通过改变input的值将数据中的值改变,然后将改变之后的数据在另外一个input中显示出来

  • ng-model
    用来同步视图和数据内容的指令,通过该指令实现双向数据同步

<!DOCTYPE html>
<html ng-app>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>Document</title>
    <link rel="stylesheet" href="bootstrap.css">
    <script src="angular.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row" ng-controller="Show">
        <div class="input-group">
            <span class="input-group-btn"><button type="button" class="btn btn-primary">输入</button></span>
            <input type="text" class="form-control" ng-model="content" placeholder="{{default}}"> 
        </div>
        <div class="input-group">
            <span class="input-group-btn"><button type="button" class="btn btn-default">显示</button></span>
            <input type="text" class="form-control" value="{{content}}", placeholder="{{default}}">
        </div>
    </div>
</div>
</body>
<script>
    function Show($scope) {
        $scope.default = 'please input your content';
        $scope.content = "";
    }
</script>
</html>