Потратил на это несколько часов, просмотрел многочисленные сообщения стека и блоги, но, похоже, не может получить это, чтобы обновить мою модель. В частности, я пытаюсь обновить элемент массива (ng-repeat). В приведенном ниже простом случае я перебираю список мест и, нажимая кнопку «Нравится», соответствующим образом обновляю сервер и отражаю изменения в элементе мест проведения в $scope.
в моем search.html есть директива:
<ion-content>
<venues-list venues="venues"></venues-list>
</ion-content>
и контроллер поиска у меня есть:
app.controller('bleh', function(Service) {
...
$scope.venues = [{ id: 1, name: 'Venue1', like: false },{ id: 2, name: 'Venue2', like: false }];
...
});
Там нет ничего необычного. Затем в моей директиве списка мест проведения:
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: '='
}
}
});
то в моем venue.html у меня есть:
<div ng-repeat="venue in venues">
<p>{{venue.name}}</p>
<button ng-click="likeToggle(venue, $index)">Like</button>
</div>
Я пробовал много разных вариантов:
$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 });
Я еще не использовал ссылку в директиве, но мой шаблон places.html, очевидно, немного сложнее, чем представленный здесь.
ИЗМЕНИТЬ:
Просто чтобы обсуждение было актуальным, возможно, я должен был упомянуть: данные возвращаются с сервера без проблем, я обрабатываю ошибки и определенно попадаю в ту часть кода, где нужно обновить $scope. ПРИМЕЧАНИЕ: приведенный выше код является небольшим представлением полного приложения, но все основные части изложены выше.
- Контроллер поиска
- Сервис
- директива списка мест проведения и шаблон места проведения.html для сопровождения директивы
- директивный контроллер
РЕДАКТИРОВАНИЕ №2
$scope.foo = function() {
$scope.venues[0].like = !$scope.venues[0].like;
}
Чтобы сделать это еще проще, приведенное выше не работает - так что на самом деле суть в том, что мои элементы в массиве не отражают обновления...
ИЗМЕНИТЬ №3
$scope.foo = function() {
$scope.venues[0].like = !$scope.venues[0].like;
}
Приношу извинения - просто повторю то, что я пытался сказать выше - вышеизложенное меняет область действия, однако изменения не отражаются на представлении.
app.module('bleh', function(Service) {
модуль? этоcontroller
? - person vp_arth   schedule 09.06.2016