【AngularJS学习笔记】01 指令、服务和过滤器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【AngularJS学习笔记】01 指令、服务和过滤器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7503字,纯文字阅读大概需要11分钟。
内容图文
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 = ‘test@qq.com‘" > 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) { returnfunction(x) { return hexafy.myFunc(x); }; }]); app.controller(‘myCtrl‘, function($scope) { $scope.counts = [255, 251, 200]; }); </script>
原文:http://www.cnblogs.com/vvjiang/p/5218517.html
内容总结
以上是互联网集市为您收集整理的【AngularJS学习笔记】01 指令、服务和过滤器全部内容,希望文章能够帮你解决【AngularJS学习笔记】01 指令、服务和过滤器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。