标签:
<script type="text/javascript"> //这些参数不能修改名字 function Aaa($scope,$rootScope){ $scope.name="hello"; //name挂载到$scope,$scope是一个局部作用域,对应的控制器也是局部的 $scope.age="20"; //$rootScope是全局,在Bbb下能找到 $rootScope.sel="sel"; } function Bbb($scope){ $scope.name="hi" } </script> <body> <!--第一种方式--> <div ng-controller="Aaa"> <p>{{name}}</p> <p>{{age}}</p> </div> <div ng-controller="Bbb"> <p>{{name}}</p> <p>{{sel}}</p> </div> <!--第二种方式--> <div ng-controller="Aaa"> <p>{{name}}</p> <p>{{age}}</p> <!--如果model是指向Bbb的他就会来这里找,要是没有他就会向上找也就是向Aaa这里找--> <div ng-controller="Bbb"> <p>{{name}}</p> <p>{{sel}}</p> </div> </div> </body>
依赖注入
<script type="text/javascript"> //angular是没有传参的,要传参是通过这$scope, $rootScope这些就是依赖注入 //$scope注入的局部的,$rootScope注入的是全部的 //这些参数统称叫服务,服务是由$开头的后台跟名字 function Aaa($scope, $rootScope) { $scope.name = "hello"; } </script> <body> <div ng-controller="Aaa"> <p>{{name}}</p> <p>{{age}}</p> </div> </body>
指令
<html ng-app> <head> <meta charset="utf-8"> <title></title> </head> <script type="text/javascript" src="angular.min.js"></script> <script type="text/javascript"> function Aaa($scope, $rootScope) { $scope.name = "hello"; } </script> <body> <!--这些以ng-开头的叫做指令,html上的ng-app就是初始化指令,ng-app是可以写到任何地方--> <div ng-controller="Aaa"> <p>{{name}}</p> </div> </body> </html>
双向数据绑定(MVVM设计模式,数据改变影响视图,视图改变影响数据)
//改变数据影响视图
<script type="text/javascript"> function Aaa($scope,$timeout) { $scope.name = "hello"; // setTimeout(function(){ // 两秒过后数据改变,下面视图是成ha了,不过原生的定时器是不具备刷新视图的功能, // 所以看不到,等要用angular提供的定时器功能$timeout // $scope.name="ha"; // },2000); $timeout(function(){ $scope.name="hi"; },2000); } </script> <body> <div ng-controller="Aaa"> <p>{{name}}</p> </div> </body>
//视图影响数据
<script type="text/javascript"> function Aaa($scope,$timeout) { $scope.name = "hello"; } </script> <body> <div ng-controller="Aaa"> <!--ng-model是上面的数据--> <input type="text" ng-model="name" /> <p>{{name}}</p> </div> </body>
也可以在视图里直接点击改变name值,也可用个函数
<div ng-controller="Aaa" ng-click="name=‘hi‘"> <p>{{name}}</p> </div>
<script type="text/javascript"> function Aaa($scope,$timeout) { $scope.name = "hello"; $scope.show=function(){ $scope.name="hi"; } } </script> <body> <div ng-controller="Aaa" ng-click="show()"> <p>{{name}}</p> </div> </body>
过滤器,比如货币格式过滤器
<!--表达式里是可以支持符号的--> <!--过渡器的操作是在后面加个 |在加过滤器名 currency--> <p>费用:<span>{{iphone.money * iphone.num | currency:"¥"}}</span></p>
<script type="text/javascript"> function Aaa($scope,$timeout) { $scope.iphone={ money:5, num:1 } //表达式如果显的臃肿,可以写到这里 $scope.sum=function(){ //这里要把$scope加上 return $scope.iphone.money * $scope.iphone.num; } } </script> <body> <div ng-controller="Aaa"> <p>价格:<input type="text" ng-model="iphone.money"></p> <p>个数:<input type="text" ng-model="iphone.num"></p> <!--这里调方法--> <p>费用:<span>{{ sum()| currency:"¥"}}</span></p> </div> </body>
监听数据变化的变化$watch,他接收三个参数,前两个是必选,他是挂载到$scope下的
<script type="text/javascript"> function Aaa($scope,$timeout) { $scope.iphone={ money:5, num:1, fre:10 } $scope.sum=function(){ return $scope.iphone.money * $scope.iphone.num; } //$watch他只能监听单值,如果要监听全部最后一个参数要为true $scope.$watch("iphone",function(newVal,lodVal){ console.log(newVal); console.log(oldVal); },ture); //他不但可以监听字符串也可以监听函数 //function回调也接收三个形参,第一个是新的值,第二个老的值 $scope.$watch($scope.sum,function(newVal,lodVal){ // console.log(newVal); // console.log(oldVal); $scope.iphone.fre=newVal>=100?0:10; }); } </script>
angular模块化开发(1、可以减少变量之间的污染,2、可以做到依赖)
angular.module()接收两个参数,第一个是字符串,第二个是数组
<script type="text/javascript"> //创建模块,上面的ng-app要指写下面的模块哪个为初始模块如:ng-app="myApp" var m1=angular.module(‘myApp‘,[]); //建立控制器,这样就成模块化了 m1.controller("Aaa",function($scope){ $scope.name="yan"; }); m1.controller("Bbb",function($scope){ $scope.name="wen"; }); var m2=angular.module(‘myApp2‘,[]); var m3=angular.module(‘myApp3‘,[]); // function Aaa($scope) { // $scope.name="yan"; // } // function Bbb($scope) { // $scope.name="wen"; // } </script> <body> <div ng-controller="Aaa"> <p>{{name}}</p> </div> <div ng-controller="Bbb"> <p>{{name}}</p> </div> </body>
上面这个是本地开发的版本,要是上传到线上的话会进行压缩,那到时$scope会找不到
他提供了一种方式可以避免被压缩找不到
<script type="text/javascript"> var m1=angular.module(‘myApp‘,[]); m1.controller("Aaa",[‘$scope‘,function($scope){ $scope.name="yan"; }]); m1.controller("Bbb",[‘$scope‘,function($scope){ $scope.name="wen"; }]); var m2=angular.module(‘myApp2‘,[]); var m3=angular.module(‘myApp3‘,[]); </script>
angular提供了很多工具方法如:angular.bind,angular.copy,angular.extend
function show(){ alert(this); } angular.bind(document,show)();//改变this指向类似于jquery的$.proxy var a={ name:"hello" } var b={ age:"20" } var c=angular.copy(a);//拷贝对象 var c=angular.copy(a,b);//a全部的覆盖b angular.extend(b,a);//这个是继承的操作
标签:
原文地址:http://www.cnblogs.com/yanwen2015/p/4744743.html