Angularjs中的自定义过滤器不起作用

Posted

技术标签:

【中文标题】Angularjs中的自定义过滤器不起作用【英文标题】:Custom filter in Angularjs not working 【发布时间】:2017-07-25 21:15:45 【问题描述】:

我正在尝试在 Angularjs 中实现自定义过滤器。但我不明白这有什么问题。没有得到预期的输出。这是我的代码:

script.js

var myApp = angular.module('myModule', []);
myApp.filter("gender", function()
  return function(gender)
    switch(gender)
      case 1 : return 'Male';
      case 2 : return 'Female';
    
  
);

myApp.controller('myController', function($scope)
var employees = [
     name : 'Raghu', gender : '1', salary : 84000.779 ,
     name : 'Anil', gender : '1', salary : 78000 ,
     name : 'Ramya', gender : '2', salary : 118000 ,
     name : 'Shwetha', gender : '2', salary : 68000 ,
     name : 'Chethan', gender : '1', salary : 168000 
];
$scope.employees = employees;

);

page.html

<div class="container" ng-controller="myController">
        <h1>Angular Example Ten</h1>
        <table class="table">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Gender</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="employee in employees">
                    <td> employee.name </td>
                    <td> employee.gender | gender </td>
                    <td> employee.salary </td>
                </tr>
            </tbody>
        </table>
    </div>

【问题讨论】:

控制台有错误吗? 如果你能提到你得到的输出,那会很有帮助。 没有错误,性别栏为空.. 【参考方案1】:

将数字大小写更改为字符串值:

switch(gender)     
    case '1' : return 'Male';
    case '2' : return 'Female';
default: return 'Male';

您应该将其转换为字符串并且还具有默认结果。

AngularJS Filter

【讨论】:

【参考方案2】:

您传递的数字是字符串而不是整数。将 switch 案例编号更改为字符串

switch(gender)
      case "1" : return 'Male';
      case "2" : return 'Female';
    

var myApp = angular.module('myModule', []);
myApp.filter("gender", function()
  return function(gender)
  debugger
    switch(gender)
      case "1" : return 'Male';
      case "2" : return 'Female';
    
  
);

myApp.controller('myController', function($scope)
var employees = [
     name : 'Raghu', gender : '1', salary : 84000.779 ,
     name : 'Anil', gender : '1', salary : 78000 ,
     name : 'Ramya', gender : '2', salary : 118000 ,
     name : 'Shwetha', gender : '2', salary : 68000 ,
     name : 'Chethan', gender : '1', salary : 168000 
];
$scope.employees = employees;
);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="container" ng-app="myModule" ng-controller="myController">
        <h1>Angular Example Ten</h1>
        <table class="table">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Gender</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="employee in employees">
                    <td> employee.name </td>
                    <td> employee.gender | gender </td>
                    <td> employee.salary </td>
                </tr>
            </tbody>
        </table>
    </div>

【讨论】:

【参考方案3】:

将数字大小写更改为字符串值:

case '1' : return 'Male';
case '2' : return 'Female';

因为1 !== "1"

console.log('1 !== "1" ::::', 1 !== "1"); // true

【讨论】:

以上是关于Angularjs中的自定义过滤器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 ag-grid 中带有下拉菜单的自定义过滤器在角度 10 中不起作用

ng-repeat 上的 Angularjs OrderBy 不起作用

facebook通知中的自定义消息不起作用

spaCy中的自定义停用词不起作用

show_404() 中的自定义视图不起作用

xml布局中的自定义视图不起作用