Angular JS 学习笔记四

下面谈谈controller和scope的概念。Angular JS是建立在MVC的架构上,HTML相对于Angular JS来说是view,那我们如何控制view上面的model呢,那我们引入controller的概念。controller就是控制器,就是对数据的操作。最简单的就是加减乘除的操作。下面以例子说话。
需求:输入金额,自动计算税(假定税率为6%)和总金额并输出。
那么首先我们建立最基本的输入和输出html

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script>
    <script>
        var app = angular.module('myApp',[]);
        app.controller('CostCtrl', function($scope){
            $scope.cost = 1000.1;
            $scope.tax = $scope.cost * 0.06;
        });
    </script>
</head>

<body ng-app="myApp" ng-controller="CostCtrl">
    Cost: <input type="text" ng-model="cost" placeholder="cost" />
    <p>
        This is your cost: {{cost|currency}}<br>
        This is your tax: {{tax|currency}}
    </p>
</body>
</html>

scopecontroller scope获得。
那么如何理解这个scope变量所定义的范围呢?
在一个ng-app里面,创建三个ng controller,例如下代码:

<body ng-app="myApp" >
    <div ng-controller="CostCtrl">
        Cost: <input type="text" ng-model="cost" placeholder="cost" />
        <p>
            This is your cost: {{cost|currency}}<br>
        </p>
    </div>
    <div ng-controller="CostCtrl">
        Cost: <input type="text" ng-model="cost" placeholder="cost" />
        <p>
            This is your cost: {{cost|currency}}<br>
        </p>
    </div>
    <div ng-controller="CostCtrl">
        Cost: <input type="text" ng-model="cost" placeholder="cost" />
        <p>
            This is your cost: {{cost|currency}}<br>
        </p>
    </div>
</body>

那么所显示的就像是这样
这里写图片描述
你会发现,改变第一个Cost不会影响到第二和第三个Cost,这个就是scope的限制。
下面还有一点要介绍,在计算tax的时候,你会发现第一段代码中tax是不会根据cost的变化而变化。那如何解决这个问题呢?答案是$watch。如下面代码所示:

<script>
    var app = angular.module('myApp',[]);
    app.controller('CostCtrl', function($scope){
        $scope.cost = 1000.1;
        $scope.$watch('cost', function(){
           $scope.tax = $scope.cost * 0.06;
        });
    });
</script>

然后tax就会动态地实现。当然我们还可以做些进一步的改进。比如我们可以传入ov和nv,分别代表old value和new value。若新值和旧值一样,那么就不去执行计算代码。在这里可能有点多余,但是若在CPU和带宽受限的情况下,这个就很有必要了。
我们接下来可以把总值的代码也添加上去。

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js"></script>
    <script>
        var app = angular.module('myApp',[]);
        app.controller('CostCtrl', function($scope){
            $scope.cost = 1000.1;
            $scope.$watch('cost', function(nv, ov){
                if (nv != ov) {
                    $scope.tax = $scope.cost * 0.06;
                }
            });
            $scope.$watch('tax', function(){
                $scope.total = parseFloat($scope.cost) + $scope.tax
            });
        });
    </script>
</head>

<body ng-app="myApp" >
    <div ng-controller="CostCtrl">
        Cost: <input type="text" ng-model="cost" placeholder="cost" />
        <p>
            This is your cost: {{cost|currency}}<br>
            This is your cost: {{tax|currency}}<br>
            This is your total: {{total|currency}}
        </p>
    </div>
</body>
</html>

总结:通过此篇文章,我们学习了controller的用法以及scope变量的定义,而且通过计算总价的需求学会了watch函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值