我正在尝试学习AngularJS,但却陷入了我的过滤功能。
我有一个包含人员和服务的JSON文件&加载它的控制器。
[{
"id": "000000-0000",
"name": "John Doe"
},
...
到目前为止一直很好,然后以我的形式连接到person.id& person.name我希望能够使用搜索框选择当前人。我创建了一个名为searchText的输入域并编写了一个searchFilter函数。我想设置$ scope.person以匹配searchText标准,以便它更新我的输入框(person.name,person.id及相应的值。
.controller('MyCtrl1', ['$scope', 'Persons', function($scope, Persons) {
$scope.persons = Persons.query();
$scope.searchFilter = function(obj) {
var p = new RegExp($scope.searchText, 'i');
$scope.person = ????
};
}])
怎么可能这样呢?通过对每个输入应用相同的过滤器? 此致
更新:为了澄清,如果searchText匹配无或几个帖子,表单仍为空。如果它与唯一帖子匹配,则此帖子将成为$ scope.person,表单将填充人员值
答案 0 :(得分:0)
Angular中实际上有一个内置过滤器可以帮助您。它被称为“过滤器”。因此,将您的搜索字段保留为searchText
,只需将您的ng-repeat写为
ng-repeat="person in persons | filter:searchText"
非常简单。
编辑:来自Angular docs http://docs.angularjs.org/api/ng.filter:filter
答案 1 :(得分:0)
actApp.directive('locinput',['composite','component',function(composite,component){ 返回{ 限制:'AE', 替换:true, 模板: “”,
link: function ($scope, $element, $attrs){
//Add the element to the main components collection
$scope.components.push($element);
var compileTag;
var htmlTag;
htmlTag= "<input3p id='inputTxt"+$attrs.index+"' chars='"+$attrs.chars+"' index='"+$attrs.index+"' answer='"+$attrs.answer+"' size='"+$attrs.size+"'></input3p>"
compileTag = component.getCompiledTag($scope, htmlTag);
$element.append(compileTag);
htmlTag = "<label3p id='correctText' text='answer["+$attrs.answer+"], question[7]' class='correctText'></label3p>";
compileTag = component.getCompiledTag($scope, htmlTag)
$element.append(compileTag);
$scope.$on(SUBMISSION, function (event, correct) {
$('.input3p').attr("disabled", true);
$("#submit3p").css({"pointer-events":"none"});
$("#submit3p").attr("disabled",true);
if(!correct){
$('.correctText').css({visibility: 'visible'});
$('#redDivide').css({visibility: 'visible'});
$element[0].show['cross']();
}else{
$element[0].show['tick']();
}
});
$element.bind("keydown", function (event) {
if (event.keyCode == 32) {
event.preventDefault();
}
});
component.annunciator($scope, $element, $attrs, 'tick');
component.annunciator($scope, $element, $attrs, 'cross');
component.position($scope, $element, $attrs);
component.size($scope, $element, $attrs);
}
}
}]);