在Angular中创建自定义过滤器

时间:2014-08-19 05:57:38

标签: angularjs

我正在尝试创建一个名为“format”的相对基本的过滤器,它删除字符串的前两个字符和字符串的最后两个字符。我认为最好的方法是返回一个像这样的子串:

var tickReg = angular.module('ticketRegister', ['ngRoute']);

tickReg.filter('format', function(){
    return function(input)
    {
        return input.substring(2, input.length-2);      
    };  
});

唯一的问题是...它不起作用:(

这是html:

<span><em><strong>{{guests.server | format}}</strong></em></span>

有什么见解?

我这样做的原因是,出于某种原因,当我使用它时:

<select multiple class="form-control" ng-model="guests.server">
                        <option>Dylan</option>
                        <option>Ebens</option>
                        <option>Lincoln</option>
                        <option>Mickey</option>
                        <option>Server 1</option>
                        <option>Server 2</option>
                        <option>Server 3</option>
                        <option>Server 4</option>
                        <option>Manager</option>
                    </select>

它将服务器名称存储在引号和方括号内(即[“Dylan”],而不仅仅是Dylan)。以下是此ng模型的相应控制器:

function CalculatorController($scope)
{
$scope.guests = 
  {
    adults : 0,
    children : 0,
    drinks : 0,
    server : undefined
  };
}

谢谢! -Pierre

1 个答案:

答案 0 :(得分:0)

您看到方括号的原因是您的选择中有multiple。所以它实际上是用于选择几个服务器的选择,因此关联的模型是包含所有选定服务器的数组

您不应使用过滤器来访问您的服务器阵列。你应该使用

guests.server[0]
例如,

访问第一个选定的服务器。并使用ng-repeat迭代guests.server并显示所有内容。顺便说一下,变量应该真正命名为servers,因为它是一个包含多个服务器的数组。

如果您打算选择一个且仅选择一个服务器,则不要在select上使用multiple属性。