5

Я пытаюсь сравнить две строки в AngularJS, и я видел примеры в Интернете. Как я понимаю, вы можете использовать angular.equals (str1, str2), вы можете использовать ===, вы можете использовать ==, если вы уверены, что обе строки ...Сравнение строк в AngularJS

Я пробовал все три, но я не получаю результат. Что-то должно быть неправильно в том, что я сделал, но я не знаю, что это такое.

Когда я запускаю код, вызывается функция inc1(). Первое предупреждение появляется «inc1 called». Но второе предупреждение «Внутри для цикла» выполняется только один раз. Он должен выполнить дважды, не так ли?

И предупреждение внутри if (условие) вообще не выполняется. Если я удалю блок «if», то предупреждение «Внутри для цикла» выполняется два раза.

Я был бы очень признателен, если бы кто-нибудь мог сказать мне, что я делаю неправильно здесь. Я использовал angular.equals(), === и ==, но то же самое происходит каждый раз.

Это как HTML и AngularJS коды идут:

HTML:

<a class="tab-item" ng-repeat = "x in items" ng-if="name==x.names" ng-click="inc1(name)"> 
    <i class="icon ion-thumbsup"></i> 
    Like 
</a> 

AngularJS:

$rootScope.items = [ 
{ id: 1, names: 'Dolphin', image: 'dolphin.jpg'}, { id: 2, names: 'Donkey', image: 'donkey.jpg'}]; 

$scope.inc1 = function(name) { 

alert("inc1 called"); 
for(var i=0;i<$rootScope.items.length;i++) 
{ 
    alert("Inside for loop"); 
    if (name === $rootScope.items.names[i]) 
     { 
     alert("If condition satisfied"); 
     } 
} 
} 

// Скажем, название 'Дельфин'

+0

Предупреждения, вероятно, не отличный способ отладки, может быть полезно проверить отладку в chrome https://developer.chrome.com/devtools/docs/javascript-debugging или, по крайней мере, войти в консоль https: // developer.chrome.com/devtools/docs/console#writing-to-the-console – Cameron

+0

О, хорошо спасибо! Я проверю это! :) – Anusha

ответ

6

Вы итерируют по неправильному узлу :)

for(var i=0;i<$rootScope.items.length;i++) 
{ 
    alert("Inside for loop"); 
    if (name === $rootScope.items[i].names) // you iterate over items, not names, which it an Json property inside item 
     { 
     alert("If condition satisfied"); 
     } 
} 
+0

Ahaa !!! Так вы это делаете? Теперь это имеет смысл! : D Я думал, что вам нужно делать items.names [i] !! Благодаря!! Теперь это работает !! ;) – Anusha

+0

Если вы работаете для вас, вы можете закрыть эту проблему тогда :) Чтобы все закрытые задачи были чистыми. Будьте рады помочь :) – Beri

2

Вы должны сравнивать с $ rootScope.items [я] .name вместо $ rootScope.items.names [я]

+0

Да, спасибо! Я должен был понять, что я сделал, не имеет смысла: D – Anusha

0

Проблема заключается в том, что имя не определено $ ВСЕГДА scope.name не определен , В представлении вместо ng-click = "inc1 (name)" поместите ng-click = "inc1 (x.name)".