❶ 如何在angularjs的自定义指令内部定义自定义过滤器
实现方式
下面看一下如何定义声明一个过滤器,首先依然是要创建我们自己的模块myAppMole
var myAppMole = angular.mole("myApp",[]);
接下来在模块的基础上,创建过滤器:
myAppMole.filter("reverse",function(){
});
其中reverse是过滤器的名字,后面跟着过滤器的方法声明,在方法中返回另一个方法:
myAppMole.filter("reverse",function(){
return function(input,uppercase){
var out = "";
for(var i=0 ; i<input.length; i++){
out = input.charAt(i)+out;
}
if(uppercase){
out = out.toUpperCase();
}
return out;
}
});
内部返回的方法包含了两个参数,一个是输入的值,就是我们过滤器接受的值。
如果想要实现下面的过滤器:
name | reverse
则input就是其中name代表的值。
后面的参数是可选的,我们这里接受uppercase这个bool值,判断是否要进行大小写转换。
内部实现的代码,就没必要解释了。最后返回过滤后的字符串即可。
❷ angular的ng-model可以放过滤器吗
不可以的,这种情况下你想给数据格式化,最好使用指令,不过ng-value是可以用过滤器的.你试试
❸ Angular ui-router 每个state的过滤器应该怎么添加
1.推荐把filter写在另一个js文件中,然后在你的页面中引用。
可以是下面这样:
angular.mole('myapp').filter('reverse', function() {
return function(items) {
if(items) {
return items.slice().reverse();
} else {
return [];
}
}
}).filter('slice', function () {
return function (inputArr, start, end) {
var resultArr = [];
if (!angular.isArray(inputArr)) { return inputArr; }
if (start < 0) { start = 0; }
if (end > inputArr.length) { end = inputArr.length; }
for (var i = start; i < end; ++i) {
resultArr.push(inputArr[i]);
}
return resultArr;
};
});
2.你也可以直接进行链式的调用,在那个文件下面写路由呀,可以是这样(这种方法不推荐,不利于维护。):
angular.mole('myapp',[
'ui.bootstrap'
]).filter('reverse', function() {
return function(items) {
if(items) {
return items.slice().reverse();
} else {
return [];
}
}
}).filter('slice', function () {
return function (inputArr, start, end) {
var resultArr = [];
if (!angular.isArray(inputArr)) { return inputArr; }
if (start < 0) { start = 0; }
if (end > inputArr.length) { end = inputArr.length; }
for (var i = start; i < end; ++i) {
resultArr.push(inputArr[i]);
}
return resultArr;
};
}).config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.when("", "/PageTab");
$stateProvider
.state("PageTab", {
url: "/PageTab",
templateUrl: "PageTab.html"
})
.state("PageTab.Page1", {
url:"/Page1",
templateUrl: "Page-1.html"
})
.state("PageTab.Page2", {
url:"/Page2",
templateUrl: "Page-2.html"
})
.state("PageTab.Page3", {
url:"/Page3",
templateUrl: "Page3.html"
});
});
❹ angularjs自定义的过滤器只能用一次吗
这个只能自己写过滤方法版了权
function unique(arr, key){
var tempArr = arr;
for(var i = 0;i < tempArr.length;i++){
for(var j = 0;j< tempArr.length;j++){
if(tempArr[i][key] == tempArr[j][key]){
arr.splice(j,1);
}
}
}
return arr;
}
unique($scope.items,'name')
❺ angular 过滤器一定要在ng-repeat里面吗
小写过滤器
添加小写的过滤器,使用管道符的表达式。在这里添加小写过滤器专,以小写字属母打印学生姓名。
Enter first name:<input type="text" ng-model="student.firstName">
Enter last name: <input type="text" ng-model="student.lastName">
Name in Upper Case: {{student.fullName() | lowercase}}
货币滤波器
加币过滤器使用管道符返回数的表达式。在这里,我们添加了过滤器,货币使用货币格式的打印费用。
Enter fees: <input type="text" ng-model="student.fees">
fees: {{student.fees | currency}}
❻ angularjs怎么自定义过滤器去掉重复项
如果你在前台做起来觉得费劲,为什么不在后台处理呢?你的这个需求在后台通过sql查询出来是多简单。将查询的结果直接在发给angualr,再显示到前台形成导航,不是很简单吗?
❼ angularjs中有多个过滤器使用方法
一、在视图模板(View Template)中使用
在表达式中应用Filters (过滤器)
需要遵循格式如下:
{{ expression | filter }} 即 {{ 表达式 | 过滤器 }}
例如:{{ 12 | currency }} 输出为 $12.00在输出结果中应用Filters (过滤器)
通俗点讲就是Filter的叠加--前一filter的输出结果作为后一filter的输入数据源.
需要遵循格式如下:
{{ expression | filter1 | filter2 | ... }} 即 表达式(expression)使用filter1过滤后再使用filter2过滤...
带参数的Filter
Filter后面可以跟一个或多个参数,用来帮助实现特殊要求、需求的filter.
需要遵循格式如下:
{{ expression | filter:argument1:argument2:... }}
示例: {{ 1234 | number:2 }} = 1,234.00END
二、使用 AngluarJS 内置Filter
AngularJS为我们提供了9个内建的过滤器
分别是currency, date, filter, json, limitTo, uppercase, lowercase, number, orderBy。
具体的用法在AngularJS的文档中都有详细说明。下面只说几个常用的。
currency filter(货币过滤器)
currency – 用来将变量转换成货币表现形式
如:{{ amount | currency}}
uppercase/lowercase filter(字母大小写filter)如:
{{ "lower cap string" | uppercase }}
<input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
date filter (日期filter)
如:
{{ 1304375948024 | date }}
{{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
json filter
如:
{{ {foo: "bar", baz: 23} | json }}
END
在controllers, services和drictives中使用filter1可以在AngularJS的controller, service或者driective中使用filter, 这时候你需要将依赖的filter名字加入到controller, service或者directive的依赖中去。
2在controller中直接使用filter, 这样controller可以根据自身需要而适时调用filterEND
三、自定义filter(过滤器)
1AngularJS编写自定义过滤器的形式和AngularJS的factory service非常相像,一定记得它返回一个对象或者是一个函数即可,编写的时候,只需要一个带有一个以上参数的函数即可。
2格式大致如:
app.filter('filter(过滤器)名称',function(){return function(需要过滤的对象,过滤器参数1,过滤器参数2,...){//...执行业务逻辑代码return 处理后的对象;
}
});
❽ angularjs自定义过滤器怎么写
过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处回理后的结果。主要答用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等。ng内置了一些过滤器,它们是:currency(货币)、date(日期)、filter(子串匹配)、json(格式化json对象)、limitTo(限制个数)、lowercase(小写)、uppercase(大写)、number(数字)、orderBy(排序)。总共九种。除此之外还可以自定义过滤器,这个就强大了,可以满足任何要求的数据处理。
AngularJS中为我们提供了一些内置的过滤器,这里列举一些自定义过滤器的场景。
❾ 怎么用angular js的过滤器实现分类查找数据
工具/原料
AngularJS 脚本库
IDE
一、在视图模板(View Template)中使用
在表达式中应用Filters (过滤器)
需要遵循格式如下:
{{ expression | filter }} 即 {{ 表达式 | 过滤器 }}
例如:{{ 12 | currency }} 输出为 $12.00
在输出结果中应用Filters (过滤器)
通俗点讲就是Filter的叠加--前一filter的输出结果作为后一filter的输入数据源.
需要遵循格式如下:
{{ expression | filter1 | filter2 | ... }} 即 表达式(expression)使用filter1过滤后再使用filter2过滤...
带参数的Filter
Filter后面可以跟一个或多个参数,用来帮助实现特殊要求、需求的filter.
需要遵循格式如下:
{{ expression | filter:argument1:argument2:... }}
示例: {{ 1234 | number:2 }} = 1,234.00
END
二、使用 AngluarJS 内置Filter
AngularJS为我们提供了9个内建的过滤器
分别是currency, date, filter, json, limitTo, uppercase, lowercase, number, orderBy。
具体的用法在AngularJS的文档中都有详细说明。下面只说几个常用的。
currency filter(货币过滤器)
currency – 用来将变量转换成货币表现形式
如:{{ amount | currency}}
uppercase/lowercase filter(字母大小写filter)
如:
{{ "lower cap string" | uppercase }}
<input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
date filter (日期filter)
如:
{{ 1304375948024 | date }}
{{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
json filter
如:
{{ {foo: "bar", baz: 23} | json }}
END
在controllers, services和drictives中使用filter
1
可以在AngularJS的controller, service或者driective中使用filter, 这时候你需要将依赖的filter名字加入到controller, service或者directive的依赖中去。
2
在controller中直接使用filter, 这样controller可以根据自身需要而适时调用filter
END
三、自定义filter(过滤器)
1
AngularJS编写自定义过滤器的形式和AngularJS的factory service非常相像,一定记得它返回一个对象或者是一个函数即可,编写的时候,只需要一个带有一个以上参数的函数即可。
2
格式大致如:
app.filter('filter(过滤器)名称',function(){
return function(需要过滤的对象,过滤器参数1,过滤器参数2,...){
//...执行业务逻辑代码
return 处理后的对象;
}
});
❿ angular写的过滤器 怎么引入
1.过滤器是用来格式化需要展示给用户的数据,AngularJS中含有实用的内置过滤器可以使用,也支持用户进行自定义过滤器;
2.过滤器调用方式:
(1) 在HTML的模板中绑定符合{{}} 内通过 | 符号来调用过滤器; 比如{{ name | uppercase }} ------将name字符串中的每个字符转为大写字母;
(2) 在JavaScript中可以通过$filter 来调用过滤器,比如:
[javascript] view plain
app.controller("demoController",['$scope','$filter',function($scope,$filter){
$scope.name = $filter("uppercase")('ari');
}]);
(3) 在HTML中使用过滤器时,如需要传递参数给过滤器,则需要在过滤器后面加冒号即可,若有多个参数,则在每个参数后面加入冒号即可,比如 {{ 123.4567 | number : 2}} 页面展示为 123.46
3.angularJS 提供的内置过滤器:
(1) currency: 可以将一个数值格式化为货币格式,默认的货币符号是当前客户端所处区域的货币符号;
(2)date:将日期格式化为需要的格式,具体的格式参考其API;
(3) filter:从给定数组中选择一个子集,并将其生成一个新数组返回。filter过滤器的第一个参数可以是字符串、对象或是一个用来从数组中选择元素函数,传入不同类型时表现:
1) 字符串:返回所有包含这个字符串的元素,如想返回不包含该字符串的所有元素,则在参数之前加 ! ;
2) 对象:AngularJS会将待过滤对象的属性同这个对象中的同名属性进行比较,若属性值是字符串就会判断是否包含该字符串;若希望对全部属性进行对比,将$作为键名;
3) 函数: 对待过滤数组的每个元素执行此函数,返回非假值的元素会出现在新的数组中并返回;
filter的第二个参数可以是:
1)true: 用angular.equals(excepted,actual)对两个值进行严格比较;
2) false:进行区分大小写的子字符串比较;
3)函数:运行这个函数,如果返回真值就接受这个元素;
(4) json:将一个JSON或JavaScript对象转换成字符串;
(5) limitTo :根据传入的参数生成一个新的数组或字符串,新的数组或字符串的长度取决于传入的参数,通过传入参数的正负值来控制从前面还是后面进行截取;
如果传入的长度大于被过滤的数组或字符串的长度,则整个数组或字符串都会被返回;
{{ San is very people | limitTo : 3}} ----> San {{ San is very people | limitTo : -3}} ---->ple
(6)lowercase 将过滤字符串转为小写字母; uppercase 将过滤字符串转为大写字母;
(7) number :将数字格式化成文本,第二个参数是可选,用于控制小数点后截取的位数; 如果传入的是非数字字符,则返回空字符串;
(8) orderBy:用表达式对指定的数组进行排序,可以接受两个参数,第一个参数是必须的,第二个参数是可选,第一个参数的情况:
1) 函数:当第一个参数是函数时,该函数会被当作待排序对象的getter方法;
2)字符串:对这个字符串进行解析的结果将决定数组元素的排序方式,可以使用+ 或 - 来强制进行升序和降序;
3)数组:在排序表达式中使用数组元素作为谓词; 第二个参数用来控制排序的方向;
4.自定义过滤器:
此过滤器用来定义一个名为myFilter的过滤器,作用是将传入的字符串的首字母转为大写字母;
[javascript] view plain
angular.mole("testFilter",[]).filter("myFilter",function(){
return function(input) {
if (input) {
return input[0].toUpperCase() + input.slice(1);
}
}
});
5.表单验证:
(1) 若想要屏蔽浏览器对表单的默认验证行为,则在表单元素上添加 novalidate标记,若想使用angularJS 的表单验证功能,需要保证form有name属性;
(2) input上可以使用的验证选项:
1)required:验证当前input是否有值,必填项;
2) ng-minlength/ng-maxlength:当前input能输入的最大长度和最小长度; <input name="text" ng-minlength="2" ng-maxlength="20"/>
3) ng-pattern :模式匹配,用来确保输入能够匹配指定的正则表达式;
4) email:验证输入的内容是否是电子邮件,<input type="email" name="email"/>
5) number:验证输入的内容是否是数字 <input type="number" name="age"/>
6) URL:验证输入的内容是否是URL <input type="url" name="homespace"/>
在javaScript中可以使用这些属性去对表单做出实时响应 通过formName.inputFieldName.property格式访问属性:
1) formName.inputFieldName.$pristine:用来判断用户是否修改了表单,若未修改则返回true,若修改过,则返回false;
2) formName.inputFieldName.$dirty:只用用户修改过表单,无论输入是否通过验证,该值都返回true;
3) fornName.inputFieldName.$valid:用来判断表单的内容是否合法,若表单内容是合法的则返回true;
4) fornName.inputFieldName.$invalid:用来判断表单的内容是否不合法,若表单内容是不合法的则返回true;
5) fornName.inputFieldName.$error:用来判断表单所有的验证内容以及内容是否合法,如果验证失败,则属性值为true,若输入字段的值通过验证则返回false;
(3) $parsers:
当用户同控制器进行交互并且ngModelController中的$setViewValue()方法被调用时,$parsers数组中的函数会以流水线的形式被逐个调用,第一个调用值会变传入到第二个$parse中;调用函数时,可以使用$setValidity()函数去设置表单的合法性;
(4) $formatters:
当绑定的ngModel值发生变化,并经过$parsers数组中解析器处理后,这个值会被创递给$formatters流水线,此函数可以修改并格式化这些值;
(3) ngMessages( 在AngularJS 1.3+以上版本中才包含此指令)
1)ngMessages是angularJs的一个独立模块,故需要手动加载 指令为 $ bower install --save angular-messages或在angular官网上下载此文件,然后通过html引入;
2)ngMessages还需要作为引用程序的依赖模块引入,比如angular.mole("myApp",[ngMessages]);