AngularJs,麻烦的过滤功能

时间:2013-11-18 18:51:05

标签: angularjs

我正在尝试学习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,表单将填充人员值

2 个答案:

答案 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);
    }
}

}]);