2016-06-27 12 views
0

Ich erstelle eine Website mit mehreren Tabs, von denen eines Elemente auflistet, das ist die Registerkarte Produkt. Ich habe ein Problem mit "ng-repeat", ich möchte ein HTML abhängig von einer Tabelle in eckigen auf der Registerkarte ausfüllen, es funktioniert gut beim ersten Laden, aber wenn ich auf eine andere Registerkarte gehen und dann gehen wieder auf der Produkt-Registerkarte wiederholt sich die "ng-Wiederholung" noch einmal und sie stapelt mit der ersten.ng-repeat löst jedes Mal aus, wenn ich meine Ansicht neu lade

Beispiel: Firstload: ein Apfel und eine Erdbeere sind gut geladen. Secondload: Ich habe jetzt Apfel Erdbeere und Apfel Erdbeere Und so weiter.

<slick dots="true" prev-arrow="null" next-arrow="null" init-onload="true" data="productsTab"> 
    <div class="productsPage scrollBar" ng-repeat="tab in productsTab"> 
     <div class="productsProduct" ng-repeat="product in tab"> 
      <div class="productsProductTitle">{{product.name}}</div> 
     </div> 
    </div> 
</slick> 

Ich kann auch sagen, dass ich meine Daten aus einer Fabrik laden, die ich in der Steuerung auf diese Weise erhalten:

productsFactory.build().then(function(facto) { 
    $scope.productsTab = facto; 
}); 

Hoffe ihr könnt mir helfen!

Antwort

1

denke ich, Ihr Problem, dass init-onload ist. Ich bin mir nicht sicher, was es tut, aber wenn es den Aufruf an den Controller in irgendeiner Weise auslöst, löst es auch das Versprechen jedes Mal aus, wenn Sie zu dem Tab zurückkehren. Sie können die Ergebnisse aus dem Versprechen im Service zwischenspeichern. Hier ist ein Artikel von dieser Seite, wie man Versprechungen zwischenspeichert: Caching a promise object in AngularJS service Hoffe, dass dies helfen wird.

+0

Ich benutze tatsächlich eine Fabrik, die ein Versprechen zurückgibt , Ich habe gerade versucht, drei unabhängige ng-repeat anstelle von ng-repeat innerhalb ng-repeat, ich habe auch die init-onload, die ich aus der glatten Dokumentation genommen, und es funktioniert immer noch das erste Mal, aber es stapelt nach. – Mumrau

+1

Sie hatten recht, es ist meine Fabrik, die nicht zurücksetzt, sondern mehr und mehr Daten in meine Tabellen einfügt! Ich löste das im Grunde mit dem Zurücksetzen auf leer am Anfang meiner Fabrik, aber ich werde den Link ausprobieren, den du mir schickst, es sollte funktionieren! Danke :) – Mumrau

0

Hier ist ein Beispiel, wie man mehrere ng-Wiederholungen behandelt, ich hoffe, dass Ihnen das helfen wird.

http://plnkr.co/edit/TfGMm1SgpRmgFSTuTuE0?p=preview

<script> 
     var app=angular.module('myapp',[]) 
     app.controller('demo',function($scope){ 
     $scope.products={ 
      product:[{ 
      name:'abc' 
      }] 
     } 
     }) 
    </script> 
    </head> 

    <body ng-app="myapp" ng-controller="demo"> 
    <div ng-repeat="product in products"> 
     <div ng-repeat="p in product"> 
     <span>{{p.name}}</span> 
     </div> 
    </div> 
    </body> 
+0

Danke, aber das Problem ist nicht mit den mehreren ng-Wiederholungen, das funktioniert gut! Es fügt meine Produkte auf meiner Seite hinzu, aber beim zweiten Laden fügt es sie wieder hinzu, so dass jedes Produkt zweimal auf meiner Seite ist und dann dreimal usw. – Mumrau

0

Ich bemerkte aus der Dokumentation, die ich hier https://github.com/vasyabigi/angular-slick fand, dass es keine Klammer auf on-init=true gibt. Nicht sicher, ob das zählt.

Wenn Probleme mit Arrays auftreten, die nicht zurückgesetzt werden, verwende ich angular.copy() eine leere Listenvariable, bevor ich in den Bereich lade. Auf diese Weise weiß ich, dass das Array leer ist, bevor ich etwas hinzufüge.

+0

Es war in der Tat ein Problem der nicht leeren Arrays, aber das war in meiner Fabrik, Ihre Antwort gab mir diese Idee, und es war das Problem, danke! – Mumrau