0

我有一个从 $scope 填充的表和标题中的两个搜索文本框,用于过滤用户名和电子邮件:

<table class="table">
<thead>
<tr>
    <th></th>
    <th><input type="search" placeholder="Search" ng-model="searchName"></th>
    <th><input type="search" placeholder="Search" ng-model="searchMail"> </th>
    <th></th>
</tr>
<tr>
    <th>ID</th>
    <th>Name</th>
    <th>email</th>
    <th>password</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="q in dataForTable | filter:{user_fullname : searchName, user_email : searchMail}">
    <td>{{q.user_id}}</td>
    <td>{{q.user_fullname}}</td>
    <td>{{q.user_email}}</td>
    <td>{{q.user_password}}</td>
</tr>
</tbody>    

dataForTable 通过 $http 来自控制器:

$http.get('http://tbrzica.comli.com/rest/index.php/simple/users').success(function(data){
   $scope.dataForTable=data;
});

但是当页面最初加载时,表是空的。只有当我在文本框中写一些东西并删除输入时,才会填充表格并且按两种条件进行搜索才能正常工作。这是某种错误吗?
提前致谢。

编辑:找到解决方案:

我需要在控制器中初始化两个 ng-model 参数:

$scope.searchName="";
$scope.searchhMail="";

tymeJV,谢谢你的回答。

4

1 回答 1

4

在控制器中,您可以为过滤器创建一个范围函数,如下所示:

$scope.filterUser = function(fullName, email) {
    return function(user) {
        return (fullName == undefined || fullName.length == 0 || user.user_fullname == fullName)
            && (email == undefined || email.length == 0 || user.user_email == email);
    }
}

在 HTML 中,您可以应用以下过滤器:

<tr ng-repeat="q in dataForTable | filter:filterUser(searchName, searchMail)">
    <td>{{q.user_id}}</td>
    <td>{{q.user_fullname}}</td>
    <td>{{q.user_email}}</td>
    <td>{{q.user_password}}</td>
</tr>

希望这有帮助!

于 2014-08-11T05:17:51.550 回答