javascript - 对每个元素应用自定义 Angular 过滤器

标签 javascript angularjs

查看Mastering Web Development with AngularJS ,我运行此自定义过滤器来 trim 文本,剪切掉最后 3 个字符,并在输入超出限制时附加 ...

app.html

  <div ng-controller="MyCtrl">
       <table>
        <thead>
            <th>Name</th>
        </thead>
        <tbody>
            <tr ng-repeat="s in strs | customTrim:2">
                <td>{{s}}</td>
            </tr>
        </tbody>
    </table>

app.js

var myApp = angular.module('myApp',[]);

myApp.controller("MyCtrl", function ($scope) {

    $scope.strs = ["HEY THERE", "me"];

});

myApp.filter('customTrim', function($filter) {
    var limitToFilter = $filter('limitTo');

    console.log("limitToFilter('ABCDEF', 2)", 
        limitToFilter('ABCDEF', 2));

    return function(input, limit) {
        console.log("input:", input, "input.length", input.length,
         "limit:", limit);
        if(input.length > limit) {
            console.log("returning...");
            console.log(limitToFilter(input, limit-3) + "...");
            return limitToFilter(input, limit-3) + "...";
        }
        return input;
    }
});

但是,打印出来的似乎是 strs 的长度,而不是单个 s

如何将数组的每个项目传递到我的 customFilter 中?

控制台

limitToFilter('ABCDEF', 2) A 
input: ["HEY THERE", "me"] input.length 2 limit: 2 
input: ["HEY THERE", "me"] input.length 2 limit: 2 

最佳答案

您应该在字符串上使用过滤器,而不是在数组上:

<tr ng-repeat="s in strs">
    <td>{{s | customTrim:2}}</td>
</tr>

关于javascript - 对每个元素应用自定义 Angular 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982807/

相关文章:

javascript - 使用 Getter 函数返回 undefined 从 Angular 服务公开一个对象

angularjs - 然后将数据返回到 Controller Angular

javascript - 如何使用 AngularJS 将数据从 html 输入标签绑定(bind)到 javascript 对象?

php - 创建数组/json 对象,无法完全正常工作

javascript - Chart.js - 多折线图 - 只显示最后一个图表

javascript - 使用 ejabberd、stropice.js、stropice.muc.js 和 stropice.roster.js 的存在问题

Javascript - 数组赋值

javascript - 有没有办法通过属性获取元素?

javascript - 无论文本/跨浏览器支持如何,都使按钮大小相同

angularjs - Angular 路由异步授权