• AngularJS学习笔记三


    模板和数据绑定

    Angular应用中的模板只是一些HTML片段而已,我们可以从服务器上加载,或者在<script>标签里定义,处理方式与所有静态资源

    相同。如过我们需要UI组件,可以在模板中定义,使用标准的HTML加上Angular指令就可以了。

    模板一旦加载到浏览器之后,Angular就会把它和数据整合起来,然后再把模板展开到整个应用中。例如:

       1:  <div ng-repeat="item in items">
       2:       <span>{{item.title}}</span>
       3:  </div>

    这里,对于items数组中的每一个元素,Angular将会给外层<div>生成一份拷贝,包括其中的所有内容。

    基本的操作流程如下:

    1.用户请求应用起始页。

    2.用户的浏览器向服务器发起一次HTTP请求,然后加载index.html页面,而这个页面里包含了模板。

    3.Angular被加载到页面中,等待页面加载完成,然后查找ng-app指令,用来定义模板边界。

    4Angular遍历模板,查找指令和绑定关系,这将触发一系列动作:注册监听器、执行一些DOM操作、从服务器获取初始化数据。这项工作的最后

    结果是,应用将会启动起来,并且将模板转换成DOM视图。

    5.连接到服务器去加载需要展示给用户的其它数据。

    对于每个Angular应用来说,步骤1到步骤3都是标准化的,步骤4到步骤5是可选的。这些步骤可以同步进行也可以一部进行。为了提升性能,对于应用中的

    第一个视图可以把数据和HTML模板一起加载进来,从而避免发起多次请求。

    显示文本

    使用ng-bind指令,我们可以在UI中任何地方显示并刷新文本。它还有两种等价形式。

    第一种是使用花括号形似,前面已经见过了:

    <p>{{greeting}}</p>

    还有一种方式就是使用基于属性的指令,叫做ng-bind:

    <p ng-bind=”greeting”></p>

    对于输出内容来说两种形式是等价的。

    他们两个的区别就是:使用{{}}时第一个加载的页面,未被渲染好的模板会被用户看到,而ng-bind就不会出现这种问题。建议大家在index页面使用ng-bind。

    表单输入

    在Angular中使用表单也十分方便正如我们前面的几个例子中看到的,我们可以使用ng-model属性把元素绑定到模型属性上,这一机制对所有标准的表单元素

    都可以起作用,例如文本框、单选按钮、复选框,等等。我们可以像下面一样把一个复选框绑定到一个属性上:

       1:  <form ng-controller="someController">
       2:       <input type="checkbox" ng-model="youCheckedIt"
       3:  &lt;/form>

    1.当你选中复选框之后,someController中的$scope的youCheckedIt的属性就会变为true.而反选会让youCheckedIt变为false。

    2.如果你在someController中把$scope.youCheckedIt设置为true,那么UI中的复选框就会变成选中状态。设置false则反之。

    当用户做了某件事的时候,我们希望程序能够做出某些动作。对于输入元素来说,我们可以使用ng-change属性来指定一个控制器方法,一旦用户修改了

    输入值,这个方法就会被调用。例如:

       1:  <body ng-app>
       2:      <div ng-controller="StartUpController">
       3:         <form>
       4:             Starting:<input ng-change="computeNeed()" ng-model="funding.startingEstimate"/>
       5:             Recommendation:{{needed}}
       6:         </form>
       7:      </div>
       8:  <script type="text/javascript" src="angular.min.js"></script>
       9:  <script type="text/javascript">
      10:      function StartUpController($scope){
      11:          $scope.funding={startingEstimate:0};
      12:          $scope.computeNeed=function(){
      13:              $scope.needed=$scope.funding.startingEstimate*10;
      14:          }
      15:      }
      16:  </script>
      17:  </body>

    上述代码策略有一个潜在问题,即,只有当用户在文本框输入值的时候我们才会计算所需的金额。当用户在这个特定的输入框输入时,输入框就会正确地刷新。

    但是,如果还有其他输入框绑定到模型的这个属性上,会怎样呢?如果接收到服务端的数据,导致数据模型刷新,又会怎么样呢?

    为了能够正确的刷新输入框,而不管它是通过何种途径进行刷新的,我们需要使用$scope中的$watch()函数。我们可以通过它监视一个表达式,当这个表达式发生改变时就调用

    回调函数。

       1:  <body ng-app>
       2:      <div ng-controller="StartUpController">
       3:         <form>
       4:             Starting:<input ng-model="funding.startingEstimate"/>
       5:             Recommendation:{{needed}}
       6:         </form>
       7:      </div>
       8:  <script type="text/javascript" src="angular.min.js"></script>
       9:  <script type="text/javascript">
      10:      function StartUpController($scope){
      11:          $scope.funding={startingEstimate:0};
      12:          var computeNeed=function(){
      13:              $scope.needed=$scope.funding.startingEstimate*10;
      14:          }
      15:          $scope.$watch("funding.startingEstimate",computeNeed)
      16:      }
      17:  </script>
      18:  </body>

    需要注意,需要监视的表达式位于引号内。表达式可以执行一些简单的操作,并且可以访问到$scope中的属性。

    在<form>标签上我们可以使用ng-submit指令来指定一个函数,当提交表单时就可以执行这个函数。ng-submit还会阻止浏览器执行默认的POST操作。

    对于其他事件的情况,Angular还提供了一些事件处理指令。对于onclick,可以使用ng-click;对于ondblclick,可以使用ng-dblclick;等等。

  • 相关阅读:
    javascript事件中'return false'详解
    jquery源码——noConflict实现
    Charles抓包工具安装与配置
    js模版引擎开发实战以及对eval函数的改进
    CSS元素垂直居中方法总结
    你必须要了解的几种排序方法
    学习Redux之分析Redux核心代码分析
    React中使用CSSTransitionGroup插件实现轮播图
    在React中使用CSS Modules设置样式
    React虚拟DOM具体实现——利用节点json描述还原dom结构
  • 原文地址:https://www.cnblogs.com/zsplove/p/3652994.html
Copyright © 2020-2023  润新知