将indexOf与Angular变量一起使用

时间:2015-08-30 03:33:28

标签: angularjs indexof

我的代码中有以下表达式:

({{article.lawyers.indexOf(sortAtt)}})

其中article.lawyers为[1]且sortAtt(由页面上的下拉列表定义)为1,我为上述表达式获得-1。

我有一种感觉我错过了一些明显的事情,因为它已经很晚了,我很累,但有人可以帮助我找出为什么这不起作用吗?我在排序过滤器中使用它,通过(除其他事项外)所选律师是否位于article.lawyers中的数组中来过滤文章。

如果我硬编码" 1"它起作用,而不是sortAtt,所以我认为它是某种约束性问题。

谢谢!

编辑以添加更多代码: 我不确定如何为此做一个JSFiddle,因为它背后有太多其他内容,但希望这段代码能有所帮助:

  <form>
<input type="text" class="form-control" placeholder="Search News Articles" ng-model="searchNews" size="70">
<br/><br/>
Find a year's articles: &nbsp;
<select ng-model="sortYear">
<option ng-click="sortYear='all';">All Years</option>
<option ng-repeat="article in news | orderObjectBy:'year':true | unique: 'year'" ng-click="sortYear={{article.year}};">{{article.year}}</option>
</select>
<br/><br/>
Find articles related to a specific attorney: &nbsp;<br/>
<select ng-model="sortAtt">
<option selected value="">All Attorneys</option>
<option ng-repeat="lawyer in attorneys| orderObjectBy:'lastname':false" value="{{lawyer.id}}" ng-click="sortAtt={{lawyer.id}};">{{lawyer.firstname}} {{lawyer.lastname}}</option>
</select>
</form>

</div>

<div id="news-titles">
    <div ng-show="sortYear=='all'">
        <div ng-bind-html="sortYear">All Articles</div><br/>
        <div ng-repeat="article in news | filter: article.lawyers.indexOf(sortAtt) > -1 | filter:searchNews">
                <h3 ng-bind-html="renderHtml(article.title)" ng-if="article.lawyers.indexOf(sortAtt) > -1"></h3>
        </div>
    </div>

    <div ng-show="sortYear!='all'">
        <div ng-bind-html="sortYear">{{sortYear}} Articles</div><br/>
        <div ng-repeat="article in news | filter: article.lawyers.indexOf(sortAtt) > -1 | filter: {year: sortYear} | filter:searchNews">
                <a href="" ng-click="loadNewsArticle(article.article);">{{article.title}}</a><br/><br/>
        </div>
    </div>
</div>

运行该过滤器可能有不同的方法吗? article.lawyers是一系列ID。我只是想确保在显示文章之前所选的ID(如果选择了一个)在该列表中。

1 个答案:

答案 0 :(得分:0)

使用过滤器比在视图级别使用业务逻辑更好。这也将解决您的问题。

yourModule.filter('indexFilter',function(){
  return function(arr,val){
    return arr.indexOf(val)>-1;
  }
});

您可以在代码中将其用作

<div ng-repeat="article in news | indexFilter: article.lawyers:sortAtt | filter: {year: sortYear} | filter:searchNews">
                <a href="" ng-click="loadNewsArticle(article.article);">{{article.title}}</a><br/><br/>
</div>