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启动时创建的。在模板链接阶段,有些指令会创建新的子作用域。
  • 相关阅读:
    ent 基本使用十二 字段
    ent 基本使用十一 sql.DB 集成
    ent 基本使用十 数据库迁移
    ent 基本使用九 代码生成
    ent 基本使用八 索引
    ent 基本使用七 Config
    ent 基本使用六 Mixin
    ent 基本使用五 schema介绍
    ent 基本使用四 图遍历查询
    ent 基本使用 三 边(关系处理)
  • 原文地址:https://www.cnblogs.com/zengm/p/3991279.html
Copyright © 2011-2022 走看看