angularjs
1 var app = angular.module("app", []); 2 3 function HelloController($scope) { 4 $scope.data = {message : "World"}; 5 6 } 7 8 function CartController($scope) { 9 $scope.items = [ 10 {title : "饼干", quantity : 8, price : 3.95}, 11 {title : "大饼", quantity : 18, price : 13.95}, 12 {title : "面包", quantity : 3, price : 5.95} 13 ]; 14 15 $scope.remove = function (index) { 16 $scope.items.splice(index, 1); 17 } 18 } 19 20 //监视字段变化(只会在用户手动输入时触发) 21 app.controller("FormController", function($scope) { 22 $scope.funding = {startingEstimate : 0}; 23 24 $scope.computeNeeded = function() { 25 $scope.needed = $scope.funding.startingEstimate * 10; 26 } 27 }); 28 29 //监视字段变化(被其他controller绑定后修改或者从后台获取数据更新都会触发) 30 function WatchController($scope) { 31 $scope.funding = {startingEstimate : 0}; 32 33 var computeNeeded = function(){ 34 $scope.funding.needed = $scope.funding.startingEstimate * 10; 35 } 36 37 $scope.$watch("funding.startingEstimate", computeNeeded); 38 39 //提交表单 40 $scope.requestFunding = function() { 41 window.alert("submit"); 42 } 43 //重置表单 44 $scope.reset = function() { 45 $scope.funding.startingEstimate = 0; 46 } 47 } 48 49 //ng-show指令控制元素显隐(display:block|none) 50 function MenuController($scope) { 51 $scope.menuState = {show : false}; 52 53 $scope.toggleMenu = function() { 54 $scope.menuState.show = !$scope.menuState.show; 55 } 56 } 57 58 //ng-class控制元素样式 59 function StyleController($scope) { 60 $scope.isError = false; 61 $scope.isWarning = false; 62 63 $scope.showError = function() { 64 $scope.isError = true; 65 $scope.isWarning = false; 66 } 67 68 $scope.showWarning = function() { 69 $scope.isWarning = true; 70 $scope.isError = false; 71 } 72 } 73 74 function ParentController($scope) { 75 } 76 // 该controller在页面端被ParentController包裹 77 // 所以该controller的$scope会继承ParentController的$scope 78 function ChildController($scope) { 79 } 80 81 //$watch 82 function Watch2Controller($scope) { 83 $scope.count = 0; 84 85 $scope.total = function() { 86 return $scope.count; 87 } 88 89 function output(newValue, oldValue, scope) { 90 console.info(newValue); 91 $scope.text = "新值:"+newValue + "; 旧值:" + oldValue; 92 } 93 94 $scope.$watch($scope.total, output); 95 } 96 97 app.factory("Data", function() { 98 var data = {}; 99 100 data.query = function() { 101 return [1,2,3]; 102 } 103 104 return data; 105 }); 106 107 //定义服务, 通过参数传递 108 function FactoryController($scope, Data) { 109 $scope.items = Data.query(); 110 111 } 112 113 //过滤器, 截取字符 114 app.filter("cutStr", function() { 115 //第一个参数为表达式的值,后边一次是增加的参数 {{item | cutStr:'=':'-'}} 116 //a:item b:'=' c:'-' 117 // item包括后面的参数都可以是angular表达式 118 var cut = function(a,b,c) { 119 console.info(a + ":" +b + ":" + c); 120 return a.length > 6 ? a.slice(0, 6) + "..." : a; 121 } 122 123 return cut; 124 }) 125 126 //利用过滤器对数据进行处理,便于展示 127 function FilterController($scope) { 128 $scope.items = ["123456789", "abcdefghijkl", "你好"]; 129 }
1 <!DOCTYPE html> 2 <html ng-app="app"> 3 <meta charset="utf-8"/> 4 <style> 5 .error { 6 background-color: red; 7 } 8 .warning { 9 background-color: orange; 10 } 11 </style> 12 <script src="js/angular.js"></script> 13 <script src="js/jquery-1.8.0.js"></script> 14 <body> 15 <div ng-controller="HelloController"> 16 <input type="text" ng-model="data.message"/> 17 <h2>Hello ,{{data.message}} !</h2> 18 </div> 19 <hr/> 20 21 <div ng-controller="CartController"> 22 <h1>Your Cart</h1> 23 <div ng-repeat="item in items"> 24 <span>{{item.title}}</span> 25 <input type="text" ng-model="item.quantity"/> 26 <span>{{item.price | currency}}</span> 27 <span>{{item.price * item.quantity | currency}}</span> 28 <span>last:{{$last}}</span> 29 <span>first:{{$first}}</span> 30 <span>middle:{{$middle}}</span> 31 <button ng-click="remove($index)">Remove</button> 32 </div> 33 </div> 34 <hr/> 35 36 <form ng-controller="FormController"> 37 <p>ng-change监控输入</p> 38 Starting : <input ng-change="computeNeeded()" ng-model="funding.startingEstimate"/> 39 Recommendation : {{needed}} 40 </form> 41 <hr/> 42 43 <form ng-controller="WatchController" ng-submit="requestFunding()"> 44 <p>$scope.$watch监控输入</p> 45 Staring : <input ng-model="funding.startingEstimate"/> 46 Recommendation : {{funding.needed}} 47 <button>submit</button> 48 <button ng-click="reset()">Reset</button> 49 </form> 50 <hr/> 51 52 <div ng-controller="MenuController"> 53 <p><button ng-click="toggleMenu()">Toggle Menu</button><span>ng-show指令</span></p> 54 <ul ng-show="menuState.show"> 55 <li ng-click="stun()">Stun</li> 56 <li ng-click="disintegrate()">Disintegrate</li> 57 <li ng-click="erase()">Erase</li> 58 </ul> 59 </div> 60 <hr/> 61 62 <div ng-controller="StyleController"> 63 <p>ng-style ng-class 接受一个表达式,用以设置样式,类名</p> 64 <p>表达式可以是: 1. 空格分隔的字符串, 2. 类名数组, 3.类名到布尔值的映射({error:isError, warning:isWarning})</p> 65 <p ng-class="{error:isError, warning:isWarning}">ng-class</p> 66 <button ng-click="showError()">Error</button> 67 <button ng-click="showWarning()">Warning</button> 68 </div> 69 <hr/> 70 71 <div ng-controller="ParentController"> 72 父controller中message属性:<input ng-model="message"/> 73 <div ng-controller="ChildController"> 74 <p>子controller中message属性: {{message}}</p> 75 </div> 76 77 <p>通过(ng-click="count=3")设置$scope中count属性:{{count}}<button ng-click="count=3">设置count为3</button></p> 78 </div> 79 <hr/> 80 81 <div ng-controller="Watch2Controller"> 82 <p>$watch方法签名 $watch(watchFn, watchAction, deepWatch);</p> 83 <p><b>watchFn: </b>一个Angular字符串表达式或者是一个返回你所希望监控的模型当前值的函数. 这个表达式会被多次执行,要注意性能</p> 84 <p><b>watchAction: </b>这是watchFn发生变化时会被调用的函数或者表达式. 在函数形式中, 它接受watchFn的新值, 旧值以及作用域的引用. 85 其签名就是function(newValue, oldValue, scope).</p> 86 <p><b>deepWatch: </b>可选的, 布尔型, 用于告诉Angular检查所监控的对象中每一个属性的变化</p> 87 88 <input ng-model="count"/> 89 <p>{{text}}</p> 90 </div> 91 <hr/> 92 93 <div ng-controller="FactoryController"> 94 <h3>这里有三个函数用于创建通用服务</h3> 95 <table> 96 <thead> 97 <tr> 98 <th>Function</th> 99 <th>定义(Defines)</td> 100 </tr> 101 </thead> 102 <tbody> 103 <tr> 104 <td>provider(name, Object/constructor())</td> 105 <td>一个可配置的服务, 带有复杂的创建逻辑. 如果你传递一个对象, 它应该有一个名为`$get`的函数, 用于返回服务的实例. 否则, Angular会假设你传递了一个构造函数, 当调用它时创建实例.</td> 106 </tr> 107 <tr> 108 <td>factory(name, $get Function())</td> 109 <td>一个不可配置的服务也带有复杂的创建逻辑. 你指定一个函数, 当调用时, 返回服务实例. 你可以认为这和<code>provider(name, { $get: $getFunction()})</code>一样</td> 110 </tr> 111 <tr> 112 <td>service(name, constructor())</td> 113 <td>一个不可配置的服务, 其创建逻辑简单. 就像<code>provider</code>的构造函数选项, Angular调用它来创建服务实例.</td> 114 </tr> 115 </tbody> 116 </table> 117 <p><span ng-repeat="item in items">{{item}} </span></p> 118 </div> 119 <hr/> 120 121 <div ng-controller="FilterController"> 122 <p>过滤器: 格式 { { expression | filterName : parameter1 : … parameterN } } </p> 123 <p>filter函数处理时第一个参数为前面expression的值,后边的参数一次为parameter1..., 其中parameter也可以为表达式</p> 124 <p>截取字符filter: <span ng-repeat="item in items">{{item | cutStr:'|':$index}} </span></p> 125 </div> 126 <script src="js/index.js"></script> 127 </body> 128 </html>