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>
时间: 2024-08-04 23:55:11

angularjs1-3,$apply,$watch的相关文章

关于vue,angularjs1,react之间的对比

1.时间投入的问题:相对于react和angularjs,学习vue的时间成本低,而且容易上手. 2.JSX的可读性比较一般.代码的可读性不如vue,当然,vue也支持jsx,但是vue更提倡template,这样设计人员和开发人员可以更容易的分析代码和贡献代码. 3.React的设计在于它的纯净以及干净的单向数据流.也就是说要为10个输入创建10个函数,而80%这样的函数可能只包含了一行this.setState()代码. 4.对于Angularjs1 ,刚开始能快速的开发,但是随着开发的进行

Angularjs1.x 中的 service,factory,provider,constant,value

了解 Angularjs1.x 中的 service,factory,provider,constant,value 的应用场景及区别 不管 service , factory 还是 provider 都属于 service 关于 service service 一旦被定义后就可以在任何地方通过依赖的方式调用且可以保存数据,直到应用结束,比如 controller(['service', function(service){}]); 而 controller 则一旦路由发生变化 controll

apply &amp; call

一.意义 function.apply(obj,args) obj代替function里this对象 args作为参数传给function 二.实例 1. obj代替function里this对象 1 function f(){ 2 alert(this.x + this.y); 3 } 4 var obj = {x:1,y:2}; 5 f.call(obj); //3 2. API应用 Math.max(param1,param2,param3…) :实现得到数组中最大的一项 问题:max不支

函数的属性length、prototype和方法call()、apply()

length指的是该函数所期望传递进来的参数个数. function fun0(){}             //0 function fun1(num1){}         //1 function fun2(num1,num2){}    //2 //prototype function MyObject(name, size)  { this.name = name; this.size = size; } var obj = new MyObject(); MyObject.prot

js中 call 和 apply

call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj. apply方法: 语法:apply([thisObj[,argArray]]) 定义:应用某

Angular2 &amp; angularjs1

迭代之路: 12年6月,Angularjs1.0.0正式版推出,亮点功能基本齐备,如双向绑定.依赖注入.指令等 Angularjs 1.3.x放弃支持IE8浏览器,推出单次绑定语法 Angularjs 1.5.x增加类似组件式书写体验,主要是为过渡Angualr2做铺垫 Angularjs1.x 缺点; 性能问题,angular是采用脏检查来实现数据的更新,当页面的数据越来越多,脏检查的效率也会相应下降,页面的卡顿会越来越明显 落后于当前Web发展理念,如组件式开发 对手机端支持不够友好 14年

AngularJS1.X版本基础

AngularJS 知识点: DataBinding Providers Validators Directives  Controllers Modules Expressions Factories Services Filters Dependency Injection Scope  AngularJS优缺点比较 优点 MVVM 数据和视图绑定,省去频繁操作jquery更新dom,自带了丰富的Angular指令,整体功能比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注

关于call 和 apply

权威指南上的说法是:可以将call 和apply看做是某个对象的方法,通过调用方法的形式 间接调用函数:需要重点说明是 :通过call和apply 调用的 函数:具体用法--->如下: 1.先说call的用法,call可以接收两个参数,也可能不是两个:第一个参数是要调用函数的 母对象,在函数体内通过this来获得对它的引用: function a(){ console.log(this); // 输出函数a中的this对象 } function b(){} // 定义函数b var obj =

call和apply

在ECMAScript v3中,给Function原型定义了这两个方法,这两个方法的作用都是一样的:使用这两个方法可以像调用其他对象方法一样调用函数,这句话是从书上抄的,至少我是没读明白这是什么意思. 下面说简单易懂的,先看段代码: function Introduce(name,age) { document.write("My name is "+name+".I am "+age); } var p=new People(); Introduce.call(p

再次理解javascript的apply

普通函数执行的时候,this指向函数执行的上下文 其实就是一个原型链的结构... 我一直没有搞懂原型链莫非它们像链条一样连在一起? 昂... 原型链可以理解成继承吗? 就像,java里边的继承吧嗯嗯刚想说这个 写js的时候一般没用到这里,还有apply()和call()一直搞不清太灵活了,不知道是什么,想要干啥 ES6新的语法来讲,你可能会看着比较熟悉了 call 和 apply就是绑定一个函数执行的 this指向 觉apply()和代码上下文有很大关系 这意思是修改父类吗? 不是.. 那我又不