Verbrachten ein paar Stunden auf diese bereits, gesiebt durch zahlreiche Stack-Beiträge und Blogs, aber kann nicht scheinen, dies zu meinem Modell Update zu machen. Genauer gesagt versuche ich ein Array-Element zu aktualisieren (ng-repeat). In dem einfachen Fall unten, ich Iterate über Veranstaltungsorte Liste, und beim Umschalten eines "Gefällt mir" -Button, ich den Server entsprechend aktualisieren, und spiegeln Sie die Änderung der Veranstaltungsorte Artikel auf dem $ Scope.angular array item nicht aktualisiert am Umfang Änderung
in meinem search.html Ich habe eine Richtlinie:
<ion-content>
<venues-list venues="venues"></venues-list>
</ion-content>
und Suchsteuerung ich habe:
app.controller('bleh', function(Service) {
...
$scope.venues = [{ id: 1, name: 'Venue1', like: false },{ id: 2, name: 'Venue2', like: false }];
...
});
Nichts dort ungewöhnlich. Dann in meiner Locations-Liste Richtlinie:
app.directive('venues-list', function() {
function venueListController($scope, Service) {
$scope.likeToggle = function(venue, $index) {
Service.likeVenue(venue.id, !venue.like).then(function() {
$scope.venues[$index].like= !venue.like;
});
}
}
return {
strict: 'E',
templateUrl: 'venue.html',
controller: venueListController,
scope: {
venues: '='
}
}
});
dann in meinem venue.html ich habe:
<div ng-repeat="venue in venues">
<p>{{venue.name}}</p>
<button ng-click="likeToggle(venue, $index)">Like</button>
</div>
habe ich versucht, viele verschiedene Möglichkeiten:
$scope.$apply() // after updating the $scope or updating scope within apply's callback function;
$scope.$digest()
$timeout(function() { // $scope.venues[$index] .... }, 0);
safe(s,f){(s.$$phase||s.$root.$$phase)?f():s.$apply(f);}
so
safe($scope, function() { $scope.venues[$index].like = !venue.like });
Ich habe den Link innerhalb der Direktive noch nicht benutzt, aber meine locations.html Vorlage ist offensichtlich etwas komplizierter als hier dargestellt.
EDIT:
einfach die Diskussion relevant zu halten, vielleicht sollte ich erwähnt habe - die Daten kommt ohne Probleme vom Server zurück, ich Fehler am Umgang mit und ich bin auf jeden Fall den Teil des Schla Code, in dem der $ scope aktualisiert werden soll. Hinweis: Der obige Code ist eine kleine Darstellung der vollständigen App, aber alle grundlegenden Teile sind oben artikuliert.
- Search-Controller
- Locations Dienst
- Ort-Liste Richtlinie und venue.html Vorlage der Richtlinie
- Richtlinie Controller
EDIT # 2
$scope.foo = function() {
$scope.venues[0].like = !$scope.venues[0].like;
}
begleiten
einfach zu halten es noch einfacher, ist die oben nicht funktioniert - so wirklich, ist unter dem Strich, meine Einzelteile innerhalb eines Arrays werden die Updates nicht reflektierenden ...
EDIT # 3
$scope.foo = function() {
$scope.venues[0].like = !$scope.venues[0].like;
}
Ich entschuldige mich - nur um zu wiederholen, was ich oben sagen wollte - das obige ändert den Umfang, aber die Änderungen werden nicht in der Ansicht wiedergegeben.
Haben Sie 'orderBy' am Veranstaltungsort versucht? Es besteht keine Notwendigkeit, einen $ Digest-Kreis zu starten, Sie haben Orte an $ scope gebunden. –
kannst du auch eine Geige schreiben? –
'app.module ('bleh', Funktion (Service) {' Modul? Ist es 'Controller'? –