zoukankan      html  css  js  c++  java
  • Angular控制器和$scope

    控制器的作用

    • 1. 为应用中的模型设置初始状态,和ng-init作用一样
    • 2.通过$scope对象把数据模型和函数暴露给视图
    • 3.监视模型其余部分的变化,并采取相应的动作。

    从前面的例子中大家已经注意到了控制器是绑定在特定的DOM片段上的,这些片段就是它们 需要负责管理的内容,我们有两张方法绑定到DOM节点上。

    • 1.在模板中通过ng-controller属性声明到DOM节点上
    • 2.通过路由动态绑定到DOM节点上(这个在后面将会阐述)
    •  1 <!DOCTYPE html>
       2 <html ng-app="">
       3 <head>
       4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
       5     <title></title>
       6 </head>
       7 <body ng-controller="myCtrl">
       8     <p>{{greet.text}},World</p>
       9     <script src="js/angular-1.2.16.js"></script>
      10     <script>
      11         function myCtrl($scope)
      12         {
      13             $scope.greet = { text: "Hello" };
      14         }
      15     </script>
      16 </body>
      17 </html>
      View Code

      通过上面的例子我们可以发现控制器和js中的方法没有什么区别,只是多了一个参数$scope.

    $scope

    $scope是什么

    $scope,在前面的几节中我们说在表达式中读取变量,而实际上表达式里读取的变量叫做属性 更为确切,所谓的变量其实是$scope对象的一个属性,即$scope是表达式的上下文。我们可以在$scope对象作用域范围内对其 属性进行操作。

    $scope的层次结构

    每个angular应用有且只用一个rootScope,但可以拥有多个child scope。

    一个应用可以有多个作用域,因为一些指定会生成新的作用域(如ng-repeat),当新的作用域被创建,他们将会被作为一个 child scope就会添加到父作用域,这样,创建了一个与它们附属的DOM相似的树结构。

    当angular对表达式{{expression}}求值时,它首先查看与当前元素关联的scope属性,如果没有找到,她将会一直向上寻找 parent scope直到找到rootScope,在Javascript这种行为被称为“原型继承”。

    $scope的函数$watch

    $scope内置有很多函数,使用最多的是$watch函数,当你的数据模型中的某一部分发生变化,$watch函数可以 向你发出通知,他的函数签名为

    $watch(watchFn,watchAction,deepWatch)这个函数返回一个函数,用来注销监控。

    接下来我们看个小例子。

     1 <!DOCTYPE html>
     2 <html ng-app="">
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     5     <title></title>
     6 </head>
     7 <body ng-controller="myCtrl">
     8     <input type="text" ng-model="num" />
     9     <p>{{price}}</p>
    10     <script src="js/angular-1.2.16.js"></script>
    11     <script>
    12         function myCtrl( $scope )
    13         {
    14             $scope.num = 10;
    15             $scope.price = 0;
    16             function callBack( newVal, oldVal, scope )
    17             {
    18                 $scope.price = newVal > 100 ? 10 : 0;
    19             }
    20             $scope.$watch("num", callBack )
    21         }
    22     </script>
    23 </body>
    24 </html>
    View Code

    这里我们监控了input的输入值,如果大于100就把p显示为10

    这里watchFn是一个带有Angular表达式,watchFn可以是一个带有Angular表达式或者函数的字符串, 它会返回被监控的数据模型的当前值。它会被执行很多次,所以你要保证它不会产生其他副作用。

    watchAction是一个函数或者表达式,当watchFn被调用时,如果是函数的形式,它将会接收到watchFn 新旧两个值,以及作用域对象的引用。function(newValue,oldValue,scope)

    deepWatch,这是一个可选的布尔类型参数,如果监控的不是一个简单的值,就可以使用这个参数,angular 会去遍历数组或者对象。

    $scope的生命周期

    • 1.创建 ——根作用域是在应用被$injector启动时创建的。在模板链接阶段,有些指令会创建新的子作用域。
  • 相关阅读:
    hi.baidu.com 百度流量统计
    Autofac is designed to track and dispose of resources for you.
    IIS Manager could not load type for module provider 'SharedConfig' that is declared in administration.config
    How to create and manage configuration backups in Internet Information Services 7.0
    定制swagger的UI
    NSwag在asp.net web api中的使用,基于Global.asax
    NSwag Tutorial: Integrate the NSwag toolchain into your ASP.NET Web API project
    JS变量对象详解
    JS执行上下文(执行环境)详细图解
    JS内存空间详细图解
  • 原文地址:https://www.cnblogs.com/zengm/p/3991279.html
Copyright © 2011-2022 走看看