Angular之$scope生命周期和$filter过滤器

一、scope

scope是一个把view(页面或者模板中DOM元素)连结到controller上的对象)

<p ng-bind="txt"></p>

var app = angular.module('myApp',[])
	app.controller('myCtrl',function($scope){
		$scope.txt = '佛系四大皆空';
	})

1、$scope 实际上就是一个JavaScript对象,controller和view都可以访问它,所以我们可以利用它在两者间传递信息

2、这个 $scope 对象里,我们既存储数据,又存储将要运行在view上的函数

$scope生命周期

总结:创建---->注册监控---->检测模型的变化---->观察模型有没有“脏”---->自动销毁

1、创建:在创建控制器或指令时,AngularJS会用$injector(参考理解angular中的module和injector,即依赖注入)创建一个新的作用域,并在这个新建的控制器或指令运行时将作用域传递进去

2、链接:当Angular开始运行时,所有的 scope对象都会附加或者链接到视图中, 这些作用域将会注册当Angular应用上下文中发生变化时所需要运行的函数。 这些函数被称为$watch函数,Angular通过这些函数获知何时启动事件循环

3、更新:当事件循环运行时,它通常执行在$rootScope上。每个子作用域都执行自己的脏值检测,每个监控函数都会检查变化。如果检测到任意变化,scope对象就会触发指定的回调函数

4、销毁:当一个$scope在视图中不再需要时,这个作用域将会清理和销毁自己。基本上不会需要你来清理作用域,但是你还是可以使用scope上的destroy()方法来清理作用域

filter过滤器

1.作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果,主要用在数据的格式化上
2.filter的两种使用方法:
1)在模板(html)中使用filter

    (1)直接在{{}}中使用filter,跟在表达式后面用 | 分割           

        例如:{{ expression | filter }}2)也可以多个filter连用,上一个filter的输出将作为下一个filter的输入   

        例如:{{ expression | filter1 | filter2 | ... }}3)filter可以接收参数,参数用 : 进行分割               

        例如:{{ expression | filter:argument1:argument2:... }}4)除了对{{}}中的数据进行格式化,我们还可以在指令中使用filter,例如先对数组array进行过滤处理,然后再循环输出

        例如:<span ng-repeat="a in array | filter ">
-----------------------------------------------------------------------       
2)在controller和service中使用filter

    (1)js代码中也可以使用过滤器,方式就是我们熟悉的依赖注入

        例如:app.controller('testC',function($scope,currencyFilter){
                   $scope.num = currencyFilter(123534); 
               }
              在模板中使用{{num}}就可以直接输出$123,534.00了,ps:在服务中也一样

    (2)controller中使用多个filter,只需注入一个$filter就够了

        例如:app.controller('testC',function($scope,$filter){
                   $scope.num = $filter('currency')(123534);
                         $scope.date = $filter('date')(new Date()); 
              }
3.内置过滤器(取之用之)

1)currency (货币处理)1)使用currency可以将数字格式化为货币,默认是美元符号,也可以自己传入所需的符号

        {{num | currency : '¥'}}

2)date (日期格式化)1{{date | date : 'yyyy-MM-dd hh:mm:ss EEEE'}}2)y M d h m s E 分别表示 年 月 日 时 分 秒 星期,可以自由组合它们

3filter(匹配子串)1)用来处理一个数组,然后可以过滤出含有某个子串的元素,作为一个子数组来返回

    (2)可以是字符串数组,也可以是对象数组。如果是对象数组,可以匹配属性的值

    (3{{ childrenArray | filter : 'a' }}                   // 匹配属性值中含有a的4{{ childrenArray | filter : {name : 'i'} }}          // 参数是对象,匹配name属性中含有i的5{{childrenArray | filter : func }}                   // 参数是函数,指定返回age>4的
          $scope.func = function(e){return e.age>4;}

4json(格式化json对象)1)json过滤器可以把一个js对象格式化为json字符串,没有参数

5limitTo(限制数组长度或字符串长度)1)limitTo过滤器用来截取数组或字符串,接收一个参数用来指定截取的长度,如果参数是负值,则从数组尾部开始截取

    (2{{ childrenArray | limitTo : 2 }}                    // 将会显示数组中的前两项

6) lowercase(小写)1)把数据转化为全部小写

7uppercase(大写)2)把数据转化为全部大写

8number(格式化数字)1)number过滤器可以为一个数字加上千位分割,像这样,123,456,789,同时接收一个参数,可以指定float类型保留几位小数

    (2{{ num | number : 2 }}

9orderBy(排序)1)可以将一个数组中的元素进行排序

    (2)接收一个参数来指定排序规则,参数可以是一个字符串,表示以该属性名称进行排序

        例如:<div>{{ childrenArray | orderBy : 'age' }}</div>             // 按age属性值进行排序,若是-age,则倒序3)可以是一个函数,定义排序属性。

        例如:<div>{{ childrenArray | orderBy : orderFunc }}</div>         // 按照函数的返回值进行排序4)还可以是一个数组,表示依次按数组中的属性值进行排序(若按第一项比较的值相等,再按第二项比较)

        例如:<div>{{ childrenArray | orderBy : ['age','name'] }}</div>    // 如果age相同,按照name进行排序
        
4.自定义过滤器
1)使用module的filter方法,返回一个函数,该函数接收输入值,并返回处理后的结果

2)实例:
	
	<div class="{{weather | ClassFormat}}">{{weather}}</div>
	
	app.filter('ClassFormat',function(){
		return function(value){
			if(value == '晴'){
				return value = 'sun';
			}
		}
	})	

    app.filter('odditems',function(){
            return function(inputArray){
                var array = [];
                for(var i=0;i<inputArray.length;i++){
                        if(i%2!==0){
                            array.push(inputArray[i]);
                        }
                }
                return array;
            }
    });
    

使用自定义filter控制类名不止是否合理,亲测可正常使用。

发布了23 篇原创文章 · 获赞 10 · 访问量 417

猜你喜欢

转载自blog.csdn.net/qq_35593965/article/details/103177831