angularjs1-3,$apply,$watch

简介:
复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>无标题文档</title>
        <script type="text/javascript" src="../../angular.min.js"></script>
    </head>
    <body>
      <div ng-app="myApp">
          <div ng-controller="firstController"  ng-click="show()">
              {{name}}
          </div>
      </div>
      <script type="text/javascript">
          var app = angular.module("myApp", []);
          //$apply传播Model的变化,Angularjs外部的控制器(Dom事件,外部回调函数)必须调用$apply,需要命令angulrjs刷新自己,applay方法就是做这个事的,把要执行的函数交给$apply去执行。
          app.controller('firstController',function($scope,$timeout){
              $scope.name = 'hello';
              setTimeout(function(){
                  //$scope.name = 'hi';   没有反映
                  $scope.$apply(function(){
                      $scope.name = 'hi';  
                  });
              },2000);
              //内置timeout
              /*$timeout(function(){
               $scope.name = 'hi';
               },2000);*/
              $scope.show = function(){
                  alert('adssdg');
                  $scope.name = 'hi点击事件发生了';
              };
          });
      </script>
    </body>
</html>
复制代码
复制代码
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript" src="../angular.min.js"></script>
</head>
<body>
<div ng-app="myApp">
    <div ng-controller="CartController">
        <p>价格:<input type="text" ng-model="iphone.money"></p>
        <p>个数:<input type="text" ng-model="iphone.num"></p>
        <p>费用:<span>{{ sum() | currency:'¥' }}</span></p>
        <p>运费:<span>{{iphone.fre | currency:'¥'}}</span></p>
        <p>总额:<span>{{ sum() + iphone.fre | currency:'¥'}}</span></p>
    </div>
</div>
<script type="text/javascript">
    var app = angular.module("myApp", []);
    app.controller('CartController',function($scope){
        $scope.iphone = {
            money : 5,
            num : 1,
            fre : 10
        };
        $scope.sum = function(){
            return $scope.iphone.money * $scope.iphone.num;
        };
        $scope.$watch('iphone.money',function(newVal,oldVal){
         console.log(newVal);
         console.log(oldVal);
         },true);
        $scope.$watch($scope.sum,function(newVal,oldVal){
            console.log(newVal);
            console.log(oldVal);
            $scope.iphone.fre = newVal >= 100 ? 0 : 10;
        });
    });
</script>
</body>
</html>
复制代码
复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>无标题文档</title>
        <script type="text/javascript" src="../../angular.min.js"></script>
    </head>
    <body>
      <div ng-app="myApp">

          <div ng-controller="CartController">
              <div ng-repeat="item in items">
                  <span>{{item.title}}</span>
                  <input ng-model="item.quantity">
                  <span>{{item.price | currency}}</span>
                  <span>{{item.price * item.quantity | currency}}</span>
              </div>
              <div>Total: {{totalCart() | currency}}</div>
              <div>Discount: {{bill.discount | currency}}</div>
              <div>Subtotal: {{subtotal() | currency}}</div>
          </div>
      </div>
      <script type="text/javascript">
          var app = angular.module("myApp", []);
          app.controller('CartController',function($scope){
                  $scope.bill = {};
                  $scope.items = [
                      {title: 'Paint pots', quantity: 8, price: 3.95},
                      {title: 'Polka dots', quantity: 17, price: 12.95},
                      {title: 'Pebbles', quantity: 5, price: 6.95}
                  ];
                  $scope.totalCart = function() {
                      var total = 0;
                      for (var i = 0, len = $scope.items.length; i < len; i++) {
                          total = total + $scope.items[i].price * $scope.items[i].quantity;
                      }
                      return total;
                  }
                  $scope.subtotal = function() {
                      return $scope.totalCart() - $scope.discount;
                  };
                  function calculateDiscount(newValue, oldValue, scope) {
                      $scope.bill.discount = newValue > 100 ? 10 : 0;
                  }
                  $scope.$watch($scope.totalCart, calculateDiscount);
          });





      </script>

    </body>
</html>
复制代码

 



本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7224938.html,如需转载请自行联系原作者
相关文章
|
7月前
|
SQL 数据库
Angular Ngrx store 里的 Selector 介绍
Angular Ngrx store 里的 Selector 介绍
46 0
|
8月前
|
JavaScript
Angular1.x的自定义指令directive参数配置详细说明
Angular1.x的自定义指令directive参数配置详细说明
|
监控 JavaScript 前端开发
angularJS学习小结——$apply方法和$watch方法
angularJS学习小结——$apply方法和$watch方法
90 0
|
JavaScript
AngularJs错误http://errors.angularjs.org/1.2.9/$injector/unpr?p0=...
AngularJs错误http://errors.angularjs.org/1.2.9/$injector/unpr?p0=...
63 0
angular16-$watch监视数据变化
angular16-$watch监视数据变化
80 0
angular16-$watch监视数据变化
Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
100 0
Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
Angular jasmine fixture.detectChanges如何触发directive的set方法
Angular jasmine fixture.detectChanges如何触发directive的set方法
86 0
Angular jasmine fixture.detectChanges如何触发directive的set方法
优化Angularjs的$watch方法
Angularjs的$watch相信大家都知道,而且也经常使用,甚至,你还在为它的某些行为感到恼火。比如,一进入页面,它就会调用一次,我明明希望它在我初始化之后,值再次变动才调用。这种行为给我们带来许多麻烦。
2123 0
|
JavaScript 前端开发