AngularJS入门讲解2

我们在上一课做了很多基础性的训练,接下来,我们讲一些难点的知识点,首先,讲一下如何实现一个全文检索功能:

<html ng-app>
<head>
  ...
  <script src="lib/angular/angular.js"></script>
  <script>
  function PhoneListCtrl($scope) {
      $scope.phones = [
        {"name": "Nexus S","snippet": "Fast just got faster with Nexus S."},
        {"name": "Motorola XOOM™ with Wi-Fi","snippet": "The Next, Next Generation tablet."},
        {"name": "MOTOROLA XOOM™", "snippet": "The Next, Next Generation tablet."}
      ];
  }
 </script>
</head>
<body ng-controller="PhoneListCtrl">

  <div class="container-fluid">
    <div class="row-fluid">
      <div class="span2">

        Search: <input ng-model="query">

      </div>
      <div class="span10">

        <ul class="phones">
          <li ng-repeat="phone in phones | filter:query">
              {{phone.name}}
            <p>{{phone.snippet}}</p>
          </li>
        </ul>

       </div>
    </div>
  </div>
</body>
</html>

上面这个代码的功能:允许用户输入一个搜索条件,立刻就能看到电话列表中的搜索结果。

当页面加载后,AngularJS会根据输入框中的值,将其与数据模型中相同名字的变量($scope.query)绑定在一起,以确保两者的同步性。

在这段代码中,用户在输入框中输入的值称作query,会立刻作为列表迭代器(phone in phones | filter:query`)其过滤器的输入。

使用filter过滤器:filter函数使用query的值来创建一个只包含匹配query记录的新数组。

ngRepeat会根据filter过滤器生成的手机记录数据数组来自动更新视图。整个过程对于开发者来说都是透明的。

接下来,我们将在上面的例子中添加一个新的功能:增加一个让用户控制手机列表显示顺序的功能

Search: <input ng-model="query">
Sort by:
<select ng-model="orderProp">
  <option value="name">Alphabetical</option>
  <option value="age">Newest</option>
</select>

<ul class="phones">
  <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
    {{phone.name}}
    <p>{{phone.snippet}}</p>
  </li>
</ul>

我们在html中做了如下更改:

  • 首先,我们增加了一个叫做orderProp<select>标签,这样我们的用户就可以选择我们提供的两种排序方法。
  • 然后,在filter过滤器后面添加一个orderBy过滤器用其来处理进入迭代器的数据。orderBy过滤器以一个数组作为输入,复制一份副本,然后把副本重排序再输出到迭代器。

AngularJS在select元素和orderProp模型之间创建了一个双向绑定。而且orderProp会被用作orderBy过滤器的输入。

无论什么时候数据模型发生了改变(比如用户在下拉菜单中选了不同的选项),AngularJS的数据绑定会让视图自动更新。没有任何笨拙的DOM操作!

function PhoneListCtrl($scope) {
  $scope.phones = [
    {"name": "Nexus S",
     "snippet": "Fast just got faster with Nexus S.",
     "age": 0},
    {"name": "Motorola XOOM™ with Wi-Fi",
     "snippet": "The Next, Next Generation tablet.",
     "age": 1},
    {"name": "MOTOROLA XOOM™",
     "snippet": "The Next, Next Generation tablet.",
     "age": 2}
  ];

  $scope.orderProp = ‘age‘;
}
  • 我们修改了phones模型—— 手机列表的数组 ——为每一个手机记录增加了一个age属性。我们会根据age属性来对手机列表进行排序。
  • 我们在控制器代码里加了一行orderProp的默认值为age。如果我们不设置默认值,这个模型会在我们的用户在下拉菜单选择一个顺序之前一直处于未初始化状态。

当应用在浏览器中加载时,“Newest”在下拉菜单中被选中。这是因为我们在控制器中我们把orderProp设置成了‘age’。所以绑定,从模型到用户界面的方向上起了作用——即数据从模型到视图的绑定。现在当你在下拉菜单中选择“Alphabetically”,数据模型会被同时更新,并且手机列表数组会被重新排序。这个时候数据绑定从另一个方向产生了作用——即数据从视图到模型的绑定。

最后,通过一幅图来看一下这个例子的M和V是如何分离的:

看了这个例子,大家是否觉得使用angular进行开发,是不是很方便啊。它封装了事件绑定,DOM操作,模板解析等操作,大大的减少了开发任务。

加油!

时间: 2024-11-05 15:57:07

AngularJS入门讲解2的相关文章

AngularJS入门讲解4:多视图,事件绑定,$resource服务讲解

上一课,大家知道,手机详细模板我们没有写出来,使用的是一个占位模板. 这一课,我们先实现手机详细信息视图,这个视图会在用户点击手机列表中的一部手机时被显示出来. 为了实现手机详细信息视图,我们将会使用$http来获取数据. 以下json对象就是手机详细的信息,我们会在手机详细信息视图中显示这些数据. { "additionalFeatures": "Contour Display, Near Field Communications (NFC),...", &quo

跟我学AngularJs:AngularJs入门及第一个实例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:主要给大家介绍了AngularJs及其特性,并以3个实例来做说明. 下载地址:https://angularjs.org/ 一.AngualrJs简介 AngularJS是由谷歌开发出来的,它是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.通常,我们是通过以下技术来解决静态网页技术在构建动态应用上的

AngularJS入门心得4——死磕指令scope

上篇<AngularJS入门心得3——HTML的左右手指令>初步介绍了指令的概念和作用.已经和指令打过一个照面,就不会那么陌生了,今天主要介绍的是一个困扰了我很久终于想通的问题,这个问题与scope有关,可以看做是<AngularJS入门心得1——directive和controller如何通信>在scope上的补充和延伸. 小时候,老师就教会了我们盲人摸象这个成语,教导我们认识事物不能片面,缺少对于一个事物全局的认知.所以,说到指令,它的一个完整结构如下: angular.mod

angularjs入门学习【指令篇】

一.首先我们来了解下指令API 属性 含义 restrict 申明标识符在模版中作为元素,属性,类,注释或组合,如何使用 priority 设置模版中相对于其他标识符的执行顺序 Template 指定一个字符串式的内嵌模版,如果你指定了模版是一个URL,那么是不会使用的 tempateUrl 指定URL加载的模版,如果你已经指定了内嵌的模版字符串,那么它不会使用的 Replace 如果为真,替换当前元素,如果是假或未指定,拼接到当前元素 Transclude 移动一个标识符的原始字节带你到一个新

AngularJS入门心得2——何为双向数据绑定

前言:谁说Test工作比较轻松,最近在熟悉几个case,差点没疯.最近又是断断续续的看我的AngularJS,总觉得自己还是没有入门,可能是自己欠前端的东西太多了,看不了几行代码就有几个常用函数不熟悉的.看过了大漠的视频,算是了解了AngularJS的一些优良特性.后来准备投身<AngularJS权威教程>,跟着它走,可是一来可能自己道行不够,二来,个人觉得这本书翻译的有些生硬以及一些瑕疵,比如: (1)9.2节:在指令中适用自作用域 (2)9.2节:在指令中适用自作用域 当然,以上都是一些瑕

angularjs入门案例 新玩具-中午吃神马

angularjs 是一个用来开发单页webAPP的mvv框架,由Google 开发,如果不知道angularjs 的可以先google 下 按照angularjs 的开发一般顺序先搭建好需要做的视图,然后准备数据,最后绑定事件处理业务逻辑,操作DOM事件用户和程序的交互. 1.开始搭建界面,使用bootstrap作为UI框架,可以快速搭建清爽的界面效果,顺便引入 angular.js jquery.js 和我们需要写的app.js 作为业务逻辑 1 <!doctype html> 2 <

Angular系列----AngularJS入门教程04:迭代器过滤(转载)

我们在上一步做了很多基础性的训练,所以现在我们可以来做一些简单的事情喽.我们要加入全文检索功能(没错,这个真的非常简单!).同时,我们也会写一个端到端测试,因为一个好的端到端测试可以帮上很大忙.它监视着你的应用,并且在发生回归的时候迅速报告. 请重置工作目录: git checkout -f step-3 我们的应用现在有了一个搜索框.注意到页面上的手机列表随着用户在搜索框中的输入而变化. 步骤2和步骤3之间最重要的不同在下面列出.你可以在GitHub里看到完整的差别. 控制器 我们对控制器不做

Angular系列---- AngularJS入门教程03:AngularJS 模板(转载)

是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点.考虑到这一点,我们用AngularJS来为我们的应用添加一些模型.视图和控制器. 请重置工作目录: git checkout -f step-2 我们的应用现在有了一个包含三部手机的列表. 步骤1和步骤2之间最重要的不同在下面列出.,你可以到GitHub去看完整的差别. 视图

AndEngine入门讲解

摘要:AndEngine是一款基于OpenGL ES技术的2D游戏引擎,可以运行在Android1.6及以上版本的系统中.拥有更多的游戏组件与扩展功能,在默认情况下已经可以支持中文. 虽然AndEngine作为游戏引擎在功能上较libGDX更为丰富和人性化,但相比libGDX的绘图渲染机能却逊色不少.libGDX有较为完善的OpenGLES环境适应性,而AndEngine在这方面的投入明显不足.所以你是否选择AndEngine,需要从实际出发,多做几次真机测试才好下决定,下面小编将逐步讲解And