【AngularJS学习笔记】01 指令、服务和过滤器

AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-

比如:

ng-app 指令初始化一个 AngularJS 应用程序。注意ng-app一般为空,如果值不为空,就得加这样一句代码var app = angular.module(‘名字‘, []);

ng-init 指令初始化应用程序数据。

这个在之前已经说过了,下面讲一下之前没讲到的。

ng-repeat指令与ng-options指令

<!--一般ng-repeat通常用于ul与li这种列表和表格-->
<div ng-app="" ng-init="names=[
{name:‘Jani‘,country:‘Norway‘},
{name:‘Hege‘,country:‘Sweden‘},
{name:‘Kai‘,country:‘Denmark‘}]">
<p>循环对象:</p>
<ul>
  <li ng-repeat="x    in names">
    {{ x.name + ‘, ‘ + x.country }}
  </li>
</ul>
</div>
<!--一般ng-options通常用于select这种下拉框-->
<select ng-model="selectedCar" ng-options="y.brand for (x, y) in cars">
</select>
<h1>你选择的是: {{selectedCar.brand}}</h1>
<h2>模型: {{selectedCar.model}}</h2>
<h3>颜色: {{selectedCar.color}}</h3>
<p>下拉列表中的选项也可以是对象的属性。</p>
</div>
<script>
var app = angular.module(‘myApp‘, []);
app.controller(‘myCtrl‘, function($scope) {
    $scope.cars = {
        car01 : {brand : "Ford", model : "Mustang", color : "red"},
        car02 : {brand : "Fiat", model : "500", color : "white"},
        car03 : {brand : "Volvo", model : "XC90", color : "black"}
    }
});
</script>

当然用ng-repeat也可以实现下拉框。

<select ng-model="selectedSite">
<option ng-repeat="x in sites" value="{{x.site}}">{{x.site}}</option>
</select>

ng-model 指令

利用ng-model指令不仅可以双向绑定控件到AngularJS应用程序的变量,还可以用来验证数据有效性

<form ng-app="" name="myForm">
    Email:
    <input type="email" name="myAddress" ng-model="text">
    <span ng-show="myForm.myAddress.$error.email">不是一个合法的邮箱地址</span>
</form>

提示信息会在 ng-show 属性返回 true 的情况下显示。

ng-model 指令可以为应用数据提供状态值(invalid, dirty, touched, error):

<form ng-app="" name="myForm" ng-init="myText = ‘[email protected]‘">
  Email:
  <input type="email" name="myAddress" ng-model="myText" required>
  <p>编辑邮箱地址,查看状态的改变。</p>
  <h1>状态</h1>
  <p>Valid: {{myForm.myAddress.$valid}} (如果输入的值是合法的则为 true)。</p>
  <p>Dirty: {{myForm.myAddress.$dirty}} (如果值改变则为 true)。</p>
  <p>Touched: {{myForm.myAddress.$touched}} (如果通过触屏点击则为 true)。</p>
</form>

ng-model 指令基于它们的状态为 HTML 元素提供了 CSS 类:

input.ng-invalid {
    background-color: lightblue;
}
  • ng-empty
  • ng-not-empty
  • ng-touched
  • ng-untouched
  • ng-valid
  • ng-invalid
  • ng-dirty
  • ng-pending
  • ng-pristine

字面意思相信已经足够理解了,这就用来根据输入框的各种状况来显现相应的样式。

自定义指令

<body ng-app="myApp">
<ng-My-Directive1></ng-My-Directive1>
<div ng-My-Directive2></div>
<div class="ng-My-Directive3"></div>
<!-- directive: ng-My-Directive4 -->

<script>
var app = angular.module("myApp", []);
app.directive("ngMyDirective1", function() {
    return {
        restrict : "E",
        template : "<h1>用元素来调用的的指令!</h1>"
    };
});
app.directive("ngMyDirective2", function() {
    return {
        restrict : "A",
        template : "<h1>用属性来调用的的指令!</h1>"
    };
});
app.directive("ngMyDirective3", function() {
    return {
        restrict : "C",
        template : "<h1>用类名来调用的的指令!</h1>"
    };
});
app.directive("ngMyDirective4", function() {
    return {
        restrict : "M",
        replace : true,//必须加这行代码,否则注释还是注释
        template : "<h1>用注释来调用的的指令!</h1>"
    };
});
</script>
</body>

控制器与作用域

在之前我们看到了如何用控制器去控制AngularJS应用程序。

ng-controller 指令定义了应用程序控制器。

控制器是 JavaScript 对象,由标准的 JavaScript 对象的构造函数 创建。

AngularJS 使用$scope 对象来调用控制器。

在 AngularJS 中, $scope 是一个应用象(属于应用变量和函数)。

控制器的 $scope (相当于作用域、控制范围)用来保存AngularJS Model(模型)的对象。

这个$scope就是作用域。

控制器还能有方法

<div ng-app="myApp" ng-controller="personCtrl">
姓名: {{fullName()}}
</div>
<script>
var app = angular.module(‘myApp‘, []);
app.controller(‘personCtrl‘, function($scope) {
    $scope.fullName = function() {
        return $scope.firstName + " " + $scope.lastName;
    }
});
</script>

同时控制器的这些代码可以放在外部JS中,我看到这个点的时候,第一个想到的就是我以后自己弄个组件出来容易太多了。cool~~~

AngularJS 应用组成如下:

  • View(视图), 即 HTML。
  • Model(模型), 当前视图中可用的数据。
  • Controller(控制器), 即 JavaScript 函数,可以添加或修改属性。

scope 是模型。

scope 是一个 JavaScript 对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。

一个控制器就相当于有一个scope ,那么如何去在多个控制器之间传递信息呢?

所有的应用都有一个根作用域 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中。

$rootScope 可作用于整个应用中。是各个 controller 中 scope 的桥梁。用 rootscope 定义的值,可以在各个 controller 中使用

<div ng-app="myApp" >
    <div ng-controller="myCtrl1">
        <h1>我叫{{myName}}</h1>
        <h1>我叫{{name}}</h1>
    </div>
    <div ng-controller="myCtrl2">
        <h1>我叫{{name}}</h1>
    </div>
</div>
<script>
var app = angular.module(‘myApp‘, []);
app.controller(‘myCtrl1‘, function($scope, $rootScope) {
    $scope.myName="哈哈";
    $rootScope.name = "Troy123";
});
app.controller(‘myCtrl2‘, function($scope, $rootScope) {
});
</script>

服务Service

在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用。

AngularJS 内建了30 多个服务。

之前看到的$scope$rootScope都是服务。

var app = angular.module(‘myApp‘, []);
app.controller(‘customersCtrl‘, function($scope, $location) {
    myUrl = $location.absUrl();
});

这里的 $location 服务,可以返回当前页面的 URL 地址。

$http 是 AngularJS 应用中最常用的服务。服务向服务器发送请求,应用响应服务器传送过来的数据。

var app = angular.module(‘myApp‘, []);
app.controller(‘myCtrl‘, function($scope, $http) {
    $http.get("welcome.htm").then(function (response) {
        $scope.myWelcome = response.data;
    });
});

或者

var app = angular.module(‘myApp‘, []);
app.controller(‘customersCtrl‘, function($scope, $http) {
    $http.get("http://www.runoob.com/try/angularjs/data/Customers_JSON.php")
    .success(function(response) {$scope.names = response.records;});
});

$timeout 服务对应了 JS window.setTimeout 函数,$interval 服务对应了 JS window.setInterval 函数。

var app = angular.module(‘myApp‘, []);
app.controller(‘myCtrl‘, function($scope, $timeout,$interval) {
    $scope.myHeader = "Hello World!";
    $timeout(function () {
        $scope.myHeader = "How are you today?";
    }, 2000);
    $scope.theTime = new Date().toLocaleTimeString();
    $interval(function () {
        $scope.theTime = new Date().toLocaleTimeString();
    }, 1000);
});

自定义服务

var app = angular.module(‘myApp‘, []);
app.service(‘hexafy‘, function() {
    this.myFunc = function (x) {
        return x.toString(16);
    }
});
app.controller(‘myCtrl‘, function($scope, hexafy) {
  $scope.hex = hexafy.myFunc(255);
});

过滤器

这个可以理解为是一个语法糖。

三个一般的过滤器uppercase   lowercase    currency

<div ng-app="" ng-init="myName=‘Troy123‘;num=12.1">
    <p>大写化名字为 {{myName| uppercase }}</p><!--结果为TROY123-->
    <p>小写化为 {{myName| lowercase }}</p><!--结果为troy123-->
    <p>金额化为 {{num| currency  }}</p><!--结果为$12.10-->
</div>

两个特殊的过滤器 orderBy filter

<div ng-app="myApp" ng-controller="namesCtrl">
<p><input type="text" ng-model="myValue"></p>
<ul>
  <li ng-repeat="x in names | filter:myValue | orderBy:‘country‘">
    {{ (x.name | uppercase) + ‘, ‘ + x.country }}
  </li>
    <!--names的每个选项,首先得根据myValue进行筛选,包含输入框myValue的值的才能被列出来,然后要根据x的county的值进行排序-->
</ul>
</div>

自定义过滤器

还记得之前讲得服务吧,这里也可以在在自定义过滤器中,用自定义的服务

<ul>
  <li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>
<p>过滤器使用服务将10进制转换为16进制。</p>
</div>
<script>
var app = angular.module(‘myApp‘, []);
app.service(‘myService‘, function() {
    this.myFunc = function (x) {
        return x.toString(16);
    }
});
app.filter(‘myFormat‘,[‘myService‘, function(hexafy) {
    return function(x) {
        return hexafy.myFunc(x);
    };
}]);
app.controller(‘myCtrl‘, function($scope) {
    $scope.counts = [255, 251, 200];
});
</script>
时间: 2024-11-06 21:15:30

【AngularJS学习笔记】01 指令、服务和过滤器的相关文章

angularjs学习笔记—事件指令

angularjs学习笔记—事件指令 小俞 4.4k 3月30日 发布 推荐 4 推荐 收藏 17 收藏,11.1k 浏览 ngClick 适用标签:所有触发条件:单击 #html <div ng-controller="LearnCtrl"> <div ng-click="click()">click me</div> <button ng-click="click()">click me<

AngularJS 学习笔记--01

学习 AngularJS 要先了解 MVC 模式 , 即 " 模型--视图--控制器 " . 模型: 包含了需要用到的数据 ; 有两种广义上的模型 : 视图模型 , 只表示从控制器传往视图的数据 ; 领域模型 , 包含了业务领域的数据 , 以及用于创建 , 存储和操纵这些数据的各种操作 , 转换和规则 , 统称为模型逻辑 . 控制器 : 是数据模型和视图之间的渠道 , 控制器会向作用域中添加业务领域逻辑 ( 也称为行为 ) , 其中作用域是模型的子集 ; 视图: 使用 HTML 元素来

AngularJs学习笔记5——自定义服务

前面整理了AngularJs双向数据绑定和自定义指令的相关内容,从手册上看也知道,ng部分还包括过滤器和函数,以及服务等. 过滤器:filter,就是对数据进行格式化,注意管道格式,例如: {{表达式 | number/currency/data/orderBy : " 相应的格式或表达式 "}} 函数:function,应该不用介绍了.这里需要注意的是forEach函数的形参顺序,基本格式如下: 1 var obj={name:"fanfan",age:"

-_-#AngularJS学习笔记

AngularJS学习笔记 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <style> .done{display:none} .ignore{color:#999} </style> <ul> <li class="

HTTP 学习笔记01

HTTP   hypertext transfer protocol (超文本传输协议) TCP/IP 协议集中的一个应用层协议 用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式 HTTP 1.0  会话方式 HTTP 1.1 方式 HTTP 请求消息结构 一个请求行,若干消息头,以及实体内容 其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开. GET   方式下是没有实体内容的 POST .PUT.DELETE 方式下请求消息才可以包含实体内容 HT

angularjs 学习笔记 -----结构定义

1.  Module使用方法 var APP =angular.module('fontApp',['ngResource', 'ngRoute', 'ngSanitize']); APP为定义的别名,之后的调用都应尽量使用该别名 'fontApp' ng-app="fontApp" 新版本angular中route被分离出来,各个被使用的Providerdou需要在此处声明. 大型应用应该拆分模块来做,先定义一个服务模块,然后再加载它 angular.module('xmpl.ser

AngularJs学习笔记--directive

原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directives匹配HTML并执行.这允许directive注册行为或者转换DOM结构. Angular自带一组内置的directive,对于建立Web App有很大帮助.继续扩展的话,可以在HTML定义领域特定语言(domain specific language ,DSL). 一.在HTML中引用direc

【opengl 学习笔记01】HelloWorld示例

<<OpenGL Programming Guide>>这本书是看了忘,忘了又看,赶脚还是把笔记做一做心里比较踏实,哈哈. 我的主题是,好记性不如烂笔头. ================================================================ 1. 下载glut库 glut库地址为:www.opengl.org/resources/libraries/glut/glutdlls37beta.zip glut全称为:OpenGL Utilit

SWIFT学习笔记01

1.Swift,用来判断option是不是nil,相当于OC的 if(option) if let name = option{ greeting = "if=====" }else{ greeting = "else===" } 2.运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break. 3.//使用..创建的范围不包含上界,如果想包含的话需要使用...,集合上,就是[)与[]的关系 for i

C++ GUI Qt4学习笔记01

C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概念:一个是“信号和槽”,另一个是“布局”. 窗口部件(widget)是用户界面的一个可视化元素,相当于windows系统中的“控件”和“容器”.任意窗口部件都可以用作窗口. 1.1Hello Qt 正确安装Qt4开发环境,创建工程目录hello,源代码文件名为hello.cpp,进入hello目录 (1