• angularJS要点记录,$location,$http等等


    前言:只是对angular的一些知识点的记录,不做深入研究。

    一、AngularJS四大特征

    AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、依赖注入等等。

    1.MVC 模式

    Angular遵循软件工程的MVC模式,并鼓励展现,数据,和逻辑组件之间的松耦合.通过依赖注入(dependency injection),Angular为客户端的Web应用带来了传统服务端的服务,例如独立于视图的控制。 因此,后端减少了许多负担,产生了更轻的Web应用。

    Model:数据,其实就是angular变量($scope.XX);(类似service)

    View: 数据的呈现,Html+Directive(指令);

    Controller:操作数据,就是function,数据的增删改查;

    即会把js拆分为service和controller层,其中service层主要就是存放一些后端定义好的接口url,也可以加上对应的参数等,如下图:

    然后就可以在controller层中调用这些方法,并进行一些逻辑的书写,如下图:

    在HTML里面书写对应的ng-controller进行绑定 

    <body class="hold-transition skin-red sidebar-mini" ng-app="lehuan" ng-controller="goodsController"
          ng-init="findItemCatList()">

    2.双向绑定 

    AngularJS是建立在这样的信念上的:即声明式编程应该用于构建用户界面以及编写软件构建,而指令式编程非常适合来表示业务逻辑。框架采用并扩展了传统HTML,通过双向的数据绑定来适应动态内容双向的数据绑定允许模型和视图之间的自动同步。因此,AngularJS使得对DOM的操作不再重要并提升了可测试性。

    3.依赖注入 

    依赖注入(Dependency Injection,简称DI)是一种设计模式, 指某个对象依赖的其他对象无需手工创建,只需要“吼一嗓子”,则此对象在创建时,其依赖的对象由框架来自动创建并注入进来,其实就是最少知识法则;模块中所有的service和provider两类对象,都可以根据形参名称实现DI。

    4.模块化设计

    高内聚低耦合法则:模块内的东西相关联;模块之间之间少用关联和依赖

    1)官方提供的模块           ng、ngRoute(路由)、ngAnimate(动画)

    2)用户自定义的模块     angular.module('模块名',[ ])

    二、一些常用指令(放在你需要实现功能的地方)

    1、表达式

    表达式的写法是{{表达式 }} 表达式可以是变量或是运算式,即两个大括号

    ng-app 指令 作用是告诉子元素一下的指令是归angularJs的,angularJs会识别的

    ng-app 指令定义了 AngularJS 应用程序的 根元素。

    ng-app 指令在网页加载完毕时会自动引导(自动初始化)应用程序。

    2、双向绑定

    ng-model 指令用于绑定变量,这样用户在文本框输入的内容会绑定到变量上,而表达式可以实时地输出变量。

    3、初始化指令

    我们如果希望有些变量具有初始值,可以使用ng-init指令来对变量初始化。

    4、控制器

    ng-controller用于指定所使用的控制器。先建立模块,然后通过模块创建控制器

    <html>
    <head>
    	<title>入门小Demo-3  初始化</title>
    	<script src="angular.min.js"></script>
    	<script>
    		var app=angular.module('myApp',[]); //定义了一个叫myApp的模块,module是一个方法,[]中可以放其他模块名,表示引用另一个模块
    		//定义控制器,第一个参数为控制器名称,第二个参数是一个方法,其中$scope是控制层与视图层之间交换数据的桥梁
    		app.controller('myController',function($scope){
    // $scope可以看成是一个大变量,其中又有一个函数类型的add变量
    			$scope.add=function(){
    				return parseInt($scope.x)+parseInt($scope.y);
    			}
    		});
    	</script>
    </head>
    <body ng-app="myApp" ng-controller="myController">
    //绑定两个变量名
    x:<input ng-model="x" >
    y:<input ng-model="y" >
    运算结果:{{add()}}
    </body>
    </html>

    理解 $scope:$scope 的使用贯穿整个 AngularJS App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了$scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同样的$scope 发生改变时也会立刻重新渲染视图。

    5、事件、条件、复选框指令

    ng-click  是最常用的单击事件指令,再点击时触发控制器的某个方法,可以用它绑定方法名,实现对应的方法

    ng-if   用于条件判断

    ng-checked  指令控制复选框的勾选状态

    6、循环指令ng-repeat和ng-options

    如:

    <tr ng-repeat="x in list">

               <td>{{x}}</td>

    </tr>

    ng-repeat指令用于循环数组变量,其中x为变量,list为被循环的数组。此外,还有循环对象数组:

    <tr ng-repeat="entity in list">

               <td>{{entity.name}}</td>

               <td>{{entity.shuxue}}</td>

               <td>{{entity.yuwen}}</td>

    </tr>

    $index 用于获取ng-repeat指令循环中的索引。

    ng-options属性可以在表达式中使用数组或对象来自动生成一个selected中的option列表。ng-optionsng-repeat很相似,很多时候可以用ng-repeat来代替ng-options。但是ng-options提供了一些好处,例如减少内存提高速度,以及提供选择框的选项来让用户选择。

    7、服务

    内置服务:

    1.$http

    在angularJS里面,服务可以分为自定义或者是内置的服务器。其中,内置服务主要有:$http,因为数据一般都是在后端的,所以一般使用内置服务$http来实现

    //定义控制器
    		app.controller('myController',function($scope,$http){		
    			$scope.findAll=function(){
    				$http.get('data.json').success(
                    function(response){
    						$scope.list=response;
    					}					
    				);			
    
    //文件上传服务层
    app.service("uploadService",function($http){
    	this.uploadFile=function(){
    		var formData=new FormData();
    	    formData.append("file",file.files[0]);   
    		return $http({
                method:'POST',
                url:"../upload.do",
                data: formData,
    // 如果不指定为undefined默认为json格式
    headers: {'Content-Type':undefined},
    //要对表单进行二进制的序列化
                transformRequest: angular.identity
            });		
    	}	
    });
    

    AnjularJS对于postget请求默认的Content-Type header application/json。通过设置‘Content-Type’: undefined,这样浏览器会帮我们把Content-Type 设置为 multipart/form-data.

    通过设置 transformRequest: angular.identity ,anjularjs transformRequest function 将序列化我们的formdata object.

    2.$controller

    angular提供的一个服务,可以实现伪继承,实际上就是与BaseController共享$scope

    app.controller('brandController' ,function($scope,$controller,
    brandService){	
    	$controller('baseController',{$scope:$scope});
    //继承,其实是通过传递$scope来实现继承,赋值当前$scope为继承的控制器中的$scope	
    

    3.$location

    $location服务,可以在静态页面传参,即在url中带参数。

     

    //商品控制层(商家后台)

    app.controller('goodsController',function($scope,$controller,$location,goodsService,uploadService,item_catService,type_templateService){

    ......

        //查询实体

        $scope.findOne=function(){           

            var id= $location.search()['id'];//$location.search() 设置或获取 网页地址跟在问号后面的部分

            if(id==null){

                 return ;

            }

            goodsService.findOne(id).success(

                 function(response){

                     $scope.entity= response;                 

                 }

            );              

        }

    注意: url增加参数的时候,在 ?前要加# ,这是angularJS的地址路由的书写形式  ,如:http://localhost:9102/admin/goods_edit.html#?id=149187842867969

    $sce

    $sce服务的trustAsHtml方法来实现转换,这是angularJS信任策略

    // 定义模块:

    var app = angular.module("pinyougou",[]);

    /*$sce服务写成过滤器,一个过滤器只做一件事, 'trustHtml'自己起的名字*/

    app.filter('trustHtml',['$sce',function($sce){

        return function(data){//传入参数是被过滤的内容(信任HTML的转换)

            return $sce.trustAsHtml(data);   //返回过滤后的内容

        }

    }]);

    ng-bind-html指令用于显示html内容,竖线 |用于调用过滤器

    <div class="attr" ng-bind-html="item.title | trustHtml"></div>

    自定义服务:

    顾名思义就是自己定义的一些服务,可以理解为service层中的每个service就是一服务,然后在controller层中的function中进行引入,就像引入$http服务那样子。

    $interval   服务用来处理间歇性处理一些事情

    $interval(执行的函数,间隔的毫秒数,运行次数);

    运行次数可以缺省,如果缺省则无限循环执行  取消执行用cancel方法:$interval.cancel(time);    例子如下:

    	$scope.second = 10; 
    	time= $interval(function(){ 
    	  if($scope.second>0){ 
    		$scope.second =$scope.second-1;  			
    	  }else{
    		  $interval.cancel(time); 		  
    		  alert("秒杀服务已结束");
    	  }
    	},1000);

    页面用表达式显示$scope.second的值

    8、继承 

    对于一些复用性比较高的功能,可以将他们抽取出来,后面直接继承他们的功能。

    9、$watch方法

    $watch方法用于监控某个变量的值,当被监控的值发生变化,就自动执行相应的函数,watch函数有两个参数,一个是监控的变量的值,一个是要值变化的时候要执行的方法。

    //读取二级分类
    $scope.$watch('entity.goods.category1Id', function(newValue, oldValue) {          
        	//根据选择的值,查询二级分类
        	itemCatService.findByParentId(newValue).success(
        		function(response){
        			$scope.itemCat2List=response; 	    			
        		}
        	);    	
    }); 
    

    10、浅克隆和深克隆

    浅克隆:一个对象;深克隆:两个对象

                 var newRow= JSON.parse( JSON.stringify( oldRow )  );  //深克隆 

  • 相关阅读:
    JS client(X,Y)、screen(X,Y)、page(X,Y)的区别
    jS冒泡优化
    CSS盒子模型
    CSS段落对齐方式
    CSS引入方式
    CSS/让一个盒子消失的5中方法
    css垂直居中方法
    【数论】BSGS
    【线段树】树套树 树状数组套主席树
    【树】动态树 LCT
  • 原文地址:https://www.cnblogs.com/baichendongyang/p/13235508.html
Copyright © 2020-2023  润新知