• angular $apply和$watch


      $apply使用情景

      angularjs 外部的控制器(DOM 事件、外部的回调函数如 jQuery UI 空间等)调用了AngularJS 函数之后,必

    须调用$apply。在这种情况下,你需要命令 AngularJS 刷新自已(模型、视图等),$apply就是用来做这件事情

    的。我们在使用$apply这个方法的时候,只要可以,请把要执行的代码和函数传递给$apply 去执行,而不要自已执

    行那些函数然后再调用$apply。

    1. <!DOCTYPE html>  
    2. <html>  
    3. <head>  
    4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    5.     <title>RunJS</title>  
    6.     <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>  
    7.   
    8.     <script src="http://cdn.bootcss.com/angular.js/1.2.9/angular-route.min.js"></script>  
    9.     <script src="serviceJS01.js"></script>  
    10. </head>  
    11. <body ng-app="myApp" >  
    12. <div ng-controller="firstController" ng-click="show()">  
    13. {{name}}  
    14.     {{age}}  
    15. </div>  
    16.   
    17. </body>  
    18. </html>  
    19.   
    20. <script>  
    21.     var app = angular.module("myApp",[]);  
    22.     app.controller('firstController',function($scope,$timeout){  
    23.         setTimeout(function(){  
    24.             $scope.$apply(function(){  
    25.                 $scope.name="李四";  
    26.             })  
    27.         },2000);  
    28.         $scope.name="张三";  
    29.         $scope.age='10';  
    30.         $scope.show=function(){  
    31.             $scope.name='点击后的name';  
    32.         }  
    33.     $timeout(function(){  
    34.         $scope.age='50';  
    35.     },2000);  
    36.     })  
    37. </script>  

    在上面代码中如果我们不使用$apply来传播name值的改变,而是直接将$scope.name="李四"这句代码写在s

    etTimeout函数中,界面上显示的值根本就不会改变。

  • 相关阅读:
    Selenium WebDriver-actionchain模拟键盘左键长按
    Selenium WebDriver-actionchain模拟鼠标右键操作
    CSS3 box-sizing:content-box | border-box
    gulp 使用指南
    MAC 使用指南
    移动端布局Rem
    JS面向对象编程
    webstorm 使用指南
    js 获取 touch length
    css 内容居中
  • 原文地址:https://www.cnblogs.com/joesbell/p/7002018.html
Copyright © 2020-2023  润新知