angular学习-入门基础
angular
所有用到的库, 全部用的CDN:
运行下面代码
<script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script>
.angular的数据绑定实例,这个是最基础的,angular的所有枝叶全部从这里开始:.
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> angular最强大的东西,数据的绑定binding </div> <div class="panel-body"> <div id="bind" ng-controller="bf"> <input type="text" ng-model="data" /> {{data}} <script> app.controller("bf", function($scope) { $scope.data = "testData"; //$scope.$apply(); }); </script> </div> </div> </div> </body> </html>
通过angular,展示数组对应的数据;.
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> 通过angular,展示数组对应的数据; </div> <div class="panel-body"> <div id="arr-bind" ng-app="arr-app" ng-controller="arrCon"> <style> .s{ color:#f00; } li{ cursor: pointer; } </style> <ul> <li ng-repeat="i in lists" ng-click="bered($index)" ng-class="{s : $index == flag}"> {{i.name}}----{{i.age}} </li> </ul> <script> //angular.module("arr-app", []); function arrCon($scope) { $scope.flag = 0; $scope.bered = function(i) { $scope.flag = i; }; $scope.lists = [ {name : "hehe", age:10}, { name : "xx", age : 20 }, { name : "yy", age : 2 }, { name : "jj", age : 220 } ] }; </script> </div> </div> </div> </body> </html>
.数据过滤器的DEMO:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> 数据过滤器; </div> <div class="panel-body" ng-controller="filte"> {{sourCode}} <br> {{sourCode | up}} </div> <script> function filte($scope) { $scope.sourCode = "hehe lala dudu oo zz"; }; app.filter("up" ,function() { return function(ipt) { return ipt.replace(/ (\w)/g,function($0,$1) { return " "+$1.toUpperCase(); }); } }); </script> </div> </body> </html>
.factory工厂, $provider, service等等都是一样样的, 不要感觉很难, 其实就是看出一个数据模型或者实例就好了;:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div id="factory" class="panel panel-default"> <div class="panel-heading"> angular中的factory就相当于一个公用的实例方法,可以理解为一个多个控制器都可以用的函数; </div> <div class="panel-body" ng-controller="factory"> {{json}} <script> app.factory("ff", function() { return { "noting" : "json" }; }); app.controller("factory", function($scope, ff) { $scope.json = ff; }); </script> </div> </div> <div class="panel panel-default"> <div class="panel-title"> angular的指令; </div> <div class="panel-body"> <heh>do you content for?</heh> <script> app.directive("heh", function() { return { restrict : "AE", replace : true, transclude : true, template : '<div> <button class="btn-danger" ng-transclude></button></div>' }; }) </script> </div> </div> </body> </html>
.ng-switch指令的使用(这个跟模板很想的,就是我们常见的点击隐藏和显示Tab插件的angular首先)::
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> ng-switch的使用 </div> <div class="panel-body" ng-controller="sw"> <div ng-init="a=2"> <ul ng-switch on="a"> <li ng-switch-when="1">1</li> <li ng-switch-when="2">2</li> <li ng-switch-default>other</li> </ul> </div> <div> <button ng-click="a=1" class="btn btn-primary">test</button> <button ng-click="a=2" class="btn btn-info">test</button> <button ng-click="a=3" class="btn btn-warning">test</button> </div> </div> <script type="text/javascript"> app.controller("sw", function($scope) { }); </script> </div> </body> </html>
ng-src和ng-href;
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> ng-src和ng-href的使用(如果使用src或者href的话,HTML初始化的时候就会加载,肯定是不行的) </div> <div class="panel-body" ng-controller="srcCon"> <a ng-href="{{logo}}" > <img ng-src="{{logo}}" /> </a> </div> <script type="text/javascript"> app.controller("srcCon", function($scope) { $scope.logo = "http://www.mainbo.com/templets/images/logo.gif"; }); </script> </div> </body> </html>
如何操作页面的样式,这个直接改绑定的数据模型就好了:
运行下面代码
<div class="panel panel-default"> <div class="panel-heading"> angular对样式进行操作;(jQ是手动选择元素对元素样式进行操作,angular提供了一种更屌的方法,把元素的属性赋值给一个变量,你只要改变这个变量即可) </div> <div class="panel-body"> <hehe id="wh" ng-style="{width: w + 'px', height: h + 'px', backgroundColor: '#364'}"> hehe--o(^▽^)o哇; </hehe> </div> <script type="text/javascript"> app.directive("hehe", function() { function compile() { }; return { link : function($scope, $element) { var obj = angular.element($element); //obj.find不好用; var add = obj[0].getElementsByClassName("add")[0]; var reduce = obj[0].getElementsByClassName("reduce")[0]; angular.element(add).bind("click", function(){ $scope.h = $scope.h+10; apply(); }) angular.element(reduce).bind("click", function(){ $scope.h = $scope.h-10; apply(); }); function apply() { $scope.$apply(); } return compile; }, controller : function($scope) { $scope.w = 200; $scope.h = 50; //$scope.$apply(); }, restrict: 'AE', replace : true, scope : "=ng-style", transclude : true, template : '<div><div ng-transclude></div><button class="btn btn-default add">+</button><button class="btn btn-default reduce">-</button></div>' } }) </script> </div>
angular中的模板如何使用,这个要配合路由器使用比较叼:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> 使用模板 </div> <div class="panel-body" ng-controller="ngTpl"> <!---这个type要声明准确--> <script type="text/ng-template" id="tpl"> {{ver}} </script> <!---tpl是一个定值不是变量,要给变量要在scope中进行定义----> <div ng-include src="'tpl'"></div> <div class="well"> <button ng-click="chan()">change</button> </div> </div> <script type="text/javascript"> app.controller("ngTpl", function($scope) { function hehe(str) { str = _.shuffle(str); return str.join("") }; $scope.ver = "var——ver--heehe"; $scope.chan = function() { $scope.ver = hehe( $scope.ver ); }; }); </script> </div> </body> </html>
如何使用$scope.$watch实时改变绑定界面的模板:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> <span class="label label-danger">update</span>angular的通知数据更新三种方式$scope.$digest(),$scope.$apply(),以及通过$scope.$watch监听进行更新; </div> <div class="panel-body" ng-controller="apply"> {{hehe}} <input type="text" ng-model="m0" /> <div class="well"> the value set by $scope.$watch ==>> {{wat}} </div> <br> <button ng-click="up()" class="btn btn-default"> applay; </button> </div> <script type="text/javascript"> app.controller("apply", function($scope) { $scope.hehe = "lll________xxx"; $scope.m0 = 1; ss = $scope; $scope.up = function() { $scope.hehe = $scope.m0; //可以,但是给了提示的报错, 谁知道为甚毛? //$scope.$apply(); $scope.$digest(); }; //给$scope.m0变量是无效的; $scope.$watch("m0", function(va) { $scope.wat = va; }) }); </script> </div> </body> </html>
angular中自己定义的工具方法
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> angular中的工具方法列表 </div> <div class="panel-body"> <ul class="nav nav-pills nav-stacked"> <li role="presentation"><a href="###">angular.bind</a></li> <li role="presentation"><a href="###">angular.bootstrap</a></li> <li role="presentation"><a href="###">angular.copy</a></li> <li role="presentation"><a href="###">angular.element</a></li> <li role="presentation"><a href="###">angular.equals</a></li> <li role="presentation"><a href="###">angular.extend</a></li> <li role="presentation"><a href="###">angular.forEach</a></li> <li role="presentation"><a href="###">angular.fromJson</a></li> <li role="presentation"><a href="###">angular.identity</a></li> <li role="presentation"><a href="###">angular.injector</a></li> <li role="presentation"><a href="###">angular.isArray</a></li> <li role="presentation"><a href="###">angular.isDate</a></li> <li role="presentation"><a href="###">angular.isDefined</a></li> <li role="presentation"><a href="###">angular.isElement</a></li> <li role="presentation"><a href="###">angular.isFunction</a></li> <li role="presentation"><a href="###">angular.isNumber</a></li> <li role="presentation"><a href="###">angular.isObject</a></li> <li role="presentation"><a href="###">angular.isString</a></li> <li role="presentation"><a href="###">angular.isUndefined</a></li> <li role="presentation"><a href="###">angular.lowercase</a></li> <li role="presentation"><a href="###">angular.module</a></li> <li role="presentation"><a href="###">angular.noop</a></li> <li role="presentation"><a href="###">angular.reloadWithDebugInfo</a></li> <li role="presentation"><a href="###">angular.toJson</a></li> <li role="presentation"><a href="###">angular.uppercase</a></li> </ul > <div class="well"> 这些工具方法跟其他库差不多; angular.element是anguarLite选择元素的小JQ; <br> angular.module是模块元素的方法; </div> </div> </div> </body> </html>
ng-transclude的使用(这个是官方的案例),代码如下:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> ng-transclude的使用(这个是官方的案例): </div> <div class="panel-body" ng-controller="ExampleController"> <div> <input ng-model="title"><br> <textarea ng-model="text"></textarea> <br/> <pane title="{{title}}">{{text}}</pane> </div> </div> <script type="text/javascript"> app.directive('pane', function(){ return { restrict: 'E', transclude: true, scope: { title:'@' }, template: '<div style="border: 1px solid black;">' + '<div style="background-color: gray">{{title}}</div>' + '<ng-transclude></ng-transclude>' + '</div>' }; }) .controller('ExampleController', ['$scope', function($scope) { $scope.title = 'Lorem Ipsum'; $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; }]); </script> </div> </body> </html>
一下验证邮箱准确性的例子:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> ngPaste以及ngMouseup和ngKeyup,ngModelOptions....等方法参考官方的使用,要用查API就好了,(官方的要FQ哦;) </div> <script src="https://yearofmoo.github.io/ngMessages/angular-messages.js"></script> <div class="panel-body" ng-controller="fromvaild"> 如果不用ng-message组件的错误提示如下; <form name="userForm"> <div class="field"> <label for="emailAddress">Enter your email address:</label> <input type="email" name="emailAddress" ng-model="data.email" required /> <!-- this stuff is WAY too complex --> <div ng-if="userForm.emailAddress.$error.required" class="error"> You forgot to enter your email address... </div> <div ng-if="!userForm.emailAddress.$error.required && userForm.emailAddress.$error.email" class="error"> You did not enter your email address correctly... </div> </div> <input type="submit" /> </form> <br> <a href="https://yearofmoo.github.io/ngMessages/">老外写的DEMO</a> </div> <script type="text/javascript"> app.controller("fromvaild", function($scope) { //$scope.myField.$error = { minlength : true, required : false }; }) </script> </div> </body> </html>
setTimeout和setInterval都是经过angular包装过的,返回的是延迟对象的实例:
运行下面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>angular</title> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <script src="http://cdn.bootcss.com/jquery/2.1.1/jquery.js"></script> <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.13/angular.min.js"></script> <link href="http://cdn.bootcss.com/bootstrap/3.3.1/css/bootstrap.css" rel="stylesheet"> <script src="http://cdn.bootcss.com/underscore.js/1.7.0/underscore-min.js" type="text/javascript"></script> </head> <body ng-app="app"> <script type="text/javascript"> var app = angular.module("app",[]); </script> <div class="panel panel-default"> <div class="panel-heading"> $timeout和$interval,这两个服务; </div> <div class="panel-body" ng-controller="st"> <div class="list-group"> <a href="#" class="list-group-item active"> <h4 class="list-group-item-heading">setInterval</h4> <p class="list-group-item-text"> $interval(fn, delay, [count], [invokeApply]); </p> </a> <a href="#" class="list-group-item"> <h4 class="list-group-item-heading">timeout</h4> <p class="list-group-item-text"> $timeout(fn, [delay], [invokeApply]); </p> </a> </div> <div class="progress"> <div class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"> 0% </div> </div> <button class="btn-default btn" ng-click="prog()"> start </button> </div> <script type="text/javascript"> app.controller("st", function($scope,$element,$interval) { var $el = $($element[0]).find(".progress-bar"); console.log(arguments); //使用angular.element选中的元素用find找不到东西; $scope.prog = function() { var df = $interval(function() { var val = parseInt($el.html())+4; if(val>=104) $interval.cancel(df); $el.html( val+"%" ).width(val+"%"); },100); console.log(df) //console.log(aa = $interval) }; }); </script> </div> </body> </html>
天道酬勤