5

Ich versuche, zwei Strings in AngularJS zu vergleichen, und ich habe Beispiele online gesehen. Wie ich es verstehe, können Sie angular.equals (str1, str2), können Sie verwenden ===, können Sie verwenden == Wenn Sie sicher sind, dass beide Zeichenfolgen sind ...String-Vergleich in AngularJS

Ich habe alles versucht drei, aber ich bekomme das Ergebnis nicht. Irgendetwas muss in dem, was ich getan habe, falsch sein, aber ich weiß nicht, was es ist.

Wenn ich den Code ausführen, wird die Inc1() - Funktion aufgerufen. Die erste Warnung erscheint "inc1 called". Aber die zweite Warnung "Inside for loop" wird nur einmal ausgeführt. Es sollte zweimal ausgeführt werden, oder?

Und die Warnung innerhalb der if (Bedingung) wird überhaupt nicht ausgeführt. Wenn ich den "if" -Block entferne, wird der Alarm "Inside for loop" zweimal ausgeführt.

Ich wäre sehr dankbar, wenn mir jemand sagen könnte, was ich hier falsch mache. Ich habe angular.equals(), === und == verwendet, aber das gleiche passiert jedes Mal.

Dies ist, wie die HTML und AngularJS Codes gehen:

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"); 
     } 
} 
} 

// Sprich Name ist 'Dolphin'

+0

Alerts wahrscheinlich nicht eine gute Möglichkeit, zu debuggen, könnte es sinnvoll sein, das Debugging in Chrome https://developer.chrome.com/devtools/docs/javascript-debugging oder zumindest Protokollierung auf der Konsole https: // developer.chrome.com/devtools/docs/console#writing-to-the-console – Cameron

+0

Ohh ok danke! Ich werde das überprüfen! :) – Anusha

Antwort

6

Sie Iterieren über falschen Knoten :)

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 !!! Also, wie machst du das? Jetzt macht es Sinn! : D Ich dachte du hättest Items machen müssen. Vielen Dank!! Jetzt funktioniert es!! ;) – Anusha

+0

Wenn ot für Sie arbeitet, können Sie dieses Problem dann schließen :) Um alle geschlossenen Aufgaben sauber zu halten. Sei froh zu helfen :) – Beri

2

Sie sollten mit dem $ rootScope.items [i] .name statt $ rootScope.items.names [i]

+0

Ja, danke! Ich hätte erkennen sollen, dass das, was ich getan habe, keinen Sinn ergab: D – Anusha

0

Das Problem Vergleich ist, dass Name Allways undefined $ scope.name ist nicht definiert . In der Ansicht statt ng-click = "inc1 (name)" put ng-click = "inc1 (x.name)".