Angularjs的应用(1)

本文是在自学Codecademy上的Angularjs的总结。

  • filter, controller, 和expression的应用

Quick View

  • module 包含一个AngularJS APP的不同部分
  • controller 管理app的数据
  • expression 在webpage上呈现相应的数值
  • filter 格式化上面expression的值
  • repeat 循环数据矩阵的各个element

App.js定义一个module,代码如下:

var app = angular.module("myApp", []);

MainController.js定义数据,如下所示

app.controller('MainController', ['$scope', function($scope){
$scope.title = "Cheer on";
$scope.promo = "Come on";
$scope.product = {name: "The Book of Trees", price: 19, pubdate: new Date('2014', '03', '08')}}]);

我们在index.html这样进行调用:
首先在<body>中引用module为<body ng-app="myApp">,在各个div中用expression显示相应的数值,并用filter来格式化数值结果,比如说:

<div class="main" ng-controller="MainController">
      <div class="container">

        <h1>{{ title }}</h1>
        <h2>{{ promo }}</h2>

        <div class="col-md-6">
          <div class="thumbnail">
            <img src="img/the-book-of-trees.jpg">
            <p class="title">{{product.name | uppercase}}</p>
            <p class="price">{{product.price | currency}}</p>
            <p class="date">{{product.pubdate | date}}</p>
          </div>
        </div>

      </div>
    </div>

title和promo以及product都在MainController.js中有定义。“|”表示filter或者format。
结果如下:
网页局部结果

上面所讲的ng-controller和ng-app都是directive (指令)。下面,我们会用到另外一种directive:ng-repeat,它主要用于循环一个矩阵,并呈现其中的元素。比如,在MainController.js中,我们添加一个矩阵(如下),这个矩阵包含两个objects,每个object为一个字典:

$scope.products = [{name:'The Book of Trees', price: 19, pubdate: new Date('2014', '03', '08'), cover: 'img/the-book-of-trees.jpg'},{name:'Program or be Programmed', price: 8, pubdate: new Date('2013', '08', '01'), cover: 'img/program-or-be-programmed.jpg'}]

则在index.html中,我们只需要在相应的div中,添加重复指令ng-repeat即可,局部代码如下:

<div class="main" ng-controller="MainController">
      <div class="container">

        <h1>{{ title }}</h1>
        <h2>{{ promo }}</h2>

        <div ng-repeat="product in products" class="col-md-6">
          <div class="thumbnail">
            <img ng-src="{{product.cover}}">
            <p class="title">{{product.name | uppercase}}</p>
            <p class="price">{{product.price | currency}}</p>
            <p class="date">{{product.pubdate | date}}</p>
          </div>
        </div>

      </div>
    </div>

其中要特别注意,<img>部分,img-src为一个指令,映射所有的<img>元素的src到controller所指定的特性。

生成Directive

前面我们用到了ng-appng-controllerng-repeatng-src这些指令。那么,这些都是怎么生成的呢?

Directive限制了HTML elements的行为。当app运行的时候,AngularJS会遍历各个HTML element寻找directives。每当找到一个directive,AngularJS会触发相应的behavior。

目前为止都是静态的AngularJS app。通过在controller中添加特性并在webpage中浏览。但是AngularJS是建立动态web apps的框架,现在我们开始使我们的app动起来!

用户交互

在MainCtroller.js中的products添加新的property likes到矩阵中每一个element,并将数值初始化为0。在scope中添加新的函数property:

$scope.plusOne = function(index) {
    $scope.products[index].likes += 1;};

<p class="likes">添加函数指令,每当用户点击rating的时候,rating值自动加1。

<div class="rating">
            <p class="likes" ng-click="plusOne($index)">{{product.likes}}</p>
            <div>

局部网页效果图如下:

添加用户交互
这里,我们用到了一个新的指令ng-click。每当<p class="likes">被单击时,ng-click会告诉AngularJS运行controller中的函数plusOne()

函数plusOne()得到被单击的产品的index,并将相应产品的likes特性加1。注意plusOne()并没有与可视结果做任何互动,它仅仅是update了controller。任何controller的改变都会呈现在webpage中。至此我们完成了一个简单的AngularJS app。

现在我们已经可以完成:

-用户浏览AngularJS app
-webpage通过expressions, filters, directives呈现app中的数据
-Directives限制HTML元素
-用户单击webpage中的元素后,如果该元素有directive,AngularJS会运行函数
-controller中的函数会跟新数据
**注意:**Webpage自动改变和呈现改变的内容,网页不需要加载任何点。

Little Snack

怎样实现下面网页中的加减分:
网页实例

在相应的div或者span里面添加directive,具体代码如下:
MainController.js

$scope.increase = function(index) {
    $scope.exercises[index].count += 1;};

  $scope.decrease = function(index) {
    $scope.exercises[index].count -= 1;};

在index.html中,

<div class="col-xs-4 counters">
            <span class="decrease" ng-click="decrease($index)">-</span><span class="count">{{exercise.count}}</span><span class="increase" ng-click="increase($index)">+</span>
          </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值