无法将$ scope变量的错误插入到角度过滤器中

时间:2016-03-18 10:36:23

标签: javascript angularjs ionic-framework interpolation angularjs-filter

我有一个角度过滤器,通过检查数据是否存在于数组中并返回相应的图像网址,将用户ID转换为用户图像网址,数组与过滤器一起传递。

过滤器正在运行,ng-repeat列表显示正确的图像URL,但我的控制台中有2个错误。 第一个错误在第4行,第二个错误在ionic.bundle.js:13380:32

错误:

  

错误:undefined不是对象(评估' members.length')
错误:   [$ interpolate:interr]无法插值:{{participant.athlete_id |   idToImage:clubMembers}} TypeError:undefined不是对象   (评估' members.length')


HTML:

<div ng-repeat="participant in participants | filter:{ event_id: event.id }: true track by $index">
    <img ng-src="{{ participant.athlete_id | idToImage : clubMembers }}">
</div>

角度过滤器:

1 app.filter('idToImage', function () {
2   return function (id, members) {
3       var curMember = id;
4        var len = members.length - 1;
5        while(len >= 0){
6           if(curMember >= members[len].id){
7               return members[len].profile;
8           }
9           len--;
10        }
11     };
12 });

clubMemers in {{participant.athlete_id | idToImage:clubMembers}}是一个类似下面例子的数组,并从外部源检索:

$scope. clubMembers = [
   {"id":1234,"profile":"https://domain.net/pictures/1.jpg"},
   {"id":12345,"profile":"https://domain.net/pictures/3.jpg"},
   {"id":12346,"profile":"https://domain.net/pictures/4.jpg"}
]

1 个答案:

答案 0 :(得分:0)

我认为当members为空时,你的过滤器没有处理这个条件,因为当你不处理它时,members.length将被搞砸,代码执行将在那时停止。

过滤

app.filter('idToImage', function () {
   return function (id, members) {
       if(!members) return; //return nothing in this case
       var curMember = id;
        var len = members.length - 1; //checking above if before processing members
        while(len >= 0){
           if(curMember >= members[len].id){
               return members[len].profile;
           }
           len--;
        }
    }
});