Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 将筛选文本字段-ngTable的字符限制为10_Angularjs_Filter_Ngtable - Fatal编程技术网

Angularjs 将筛选文本字段-ngTable的字符限制为10

Angularjs 将筛选文本字段-ngTable的字符限制为10,angularjs,filter,ngtable,Angularjs,Filter,Ngtable,我已经创建了一个应用程序使用angularjs和ngTable与文件功能,该应用程序的工作也很好的过滤,但过滤文本字段应该只接受10个字符,根据我的要求 请告诉我如何将该文本字段的字符限制为10,我的代码如下所示: 脚本 $scope.tableParams = new ngTableParams({ page: 0, count: 0 }, { total: 0, counts:[], getData: function ($defer, par

我已经创建了一个应用程序使用angularjs和ngTable与文件功能,该应用程序的工作也很好的过滤,但过滤文本字段应该只接受10个字符,根据我的要求

请告诉我如何将该文本字段的字符限制为10,我的代码如下所示:

脚本

$scope.tableParams = new ngTableParams({
    page: 0, 
    count: 0
}, {
    total: 0, 
    counts:[],
    getData: function ($defer, params) {
        // use build-in angular filter
        var orderedData = params.filter() ? $filter('filter')(data, params.filter()) : data;

        $defer.resolve(orderedData);
    }
});
html

<div ng-app="main" ng-controller="DemoCtrl">
    <table ng-table="tableParams" show-filter="true" class="table">
        <tr ng-repeat="user in $data">
            <td data-title="'Name'" filter="{ 'name': 'text' }">{{user.name}}</td>
            <td data-title="'Age'">{{user.age}}</td>
        </tr>
    </table>
</div>

{{user.name}
{{user.age}

使用ng表提供的指令,您无法轻松做到这一点。 为了实现这一点,您必须创建自己的输入过滤器,将其应用于ng repeat,并使用一个简单的指令来限制输入字段的字符

下面是一个工作示例,希望它能帮助您。

HTML:


编辑

一个名为
maxlength
的html5属性可以为您执行此操作,因此您可以避免该指令,只需将此属性添加到输入字段中即可

<div ng-app="main" ng-controller="DemoCtrl">
    <table ng-table="tableParams" class="table">
        <!-- first row with custom input filterer using the charLimit directive -->
        <tr>
            <td data-title="'Name'"><input char-limit="10" ng-model="textFilter"/></td>
            <td data-title="'Age'"></td>
        </tr>
        <!-- declare the filter on your ng-repeat directive -->
        <tr ng-repeat="user in $data | filter: { 'name': textFilter }">
            <td>{{user.name}}</td>
            <td>{{user.age}}</td>
        </tr>
    </table>
</div>
directive('charLimit', function(){
    return {
        scope: {
            limit: '@charLimit',
            model: '=ngModel'
        },
        require: 'ngModel',
        restrict: 'A',
        link: function($scope, $node) {
            var limit = $scope.limit ? parseInt($scope.limit, 10) : 0;
            $scope.$watch('model', function(val) {
                if(limit>0 && !isNaN(limit))
                    $scope.model = $scope.model.slice(0,limit);                        
            });
        }
    };
})