2015-08-30 6 views
-1

У меня есть следующее выражение в моем коде:Использование IndexOf с угловой переменной

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

где article.lawyers является [1] и sortAtt (определяется выпадающего списка на странице) является 1, и я получив -1 для вышеуказанного выражения.

У меня такое чувство, что я пропустил что-то очевидное, так как уже поздно, и я устал, но кто-то может помочь мне понять, почему это не работает? Я использую его в сортировщике, который фильтрует статьи (среди прочего) независимо от того, находится ли выбранный адвокат в массиве, находящемся в статье.lawyers.

Если я жестко задал «1» вместо sortAtt, он работает, поэтому я думаю, что это какая-то проблема с привязкой.

Спасибо!

EDIT, чтобы добавить больше коды: Я не уверен, как сделать 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 - это массив идентификаторов. Я просто хочу убедиться, что выбранный идентификатор (если он выбран) находится в этом списке перед отображением статьи.

+0

Если поставить некоторые JSFiddle код, это поможет определить вашу проблему – Joy

ответ

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> 
+0

я пытался вдоль этих линий, но не писать правильно , Я не думаю. Я попробовал вашу версию и никаких ссылок не показывал, выбрал ли я адвоката. –

+0

@ReverendDovie, Поместите свой код на скрипке. –

+0

Вот скрипка кода, но, как я уже говорил, за ней стоит целый JTON-данные, поэтому в нем нет данных, так как я не хочу реплицировать все это. https://jsfiddle.net/exh0aLy7/ –

Смежные вопросы