Я уже читал некоторые дискуссии об этой проблеме, но никто не работает для меня.
У меня есть контроллер
.controller('TestFriendCtrl', ['$scope', 'APIUser', function($scope, APIUser) {
$scope.data.friends = [{username: 'test'}];
$scope.change = function(friend) {
APIUser.find(friend, function(success, data){
if (success) {
$scope.data.friends = data;
console.log($scope.data.friends);
}
})
}
}]);
Я также пробовал
.controller('TestFriendCtrl', ['$scope', '$timeout', 'APIUser', function($scope, $timeout, APIUser) {
$scope.friends = [{username: 'coucou'}];
$scope.change = function(friend) {
APIUser.find(friend, function(success, data){
if (success) {
$timeout(function() {
$scope.friends = data;
console.log($scope.friends);
} );
}
})
console.log($scope.friends);
}
}]);
а также
.controller('TestFriendCtrl', ['$scope', '$timeout', 'APIUser', function($scope, $timeout, APIUser) {
$scope.friends = [{username: 'coucou'}];
$scope.change = function(friend) {
APIUser.find(friend, function(success, data){
if (success) {
$scope.friends = angular.copy(data);
}
})
console.log($scope.friends);
}
}]);
Во всех случаях console.log($scope.friends);
вернуть ожидаемое значение
И представление
<ion-view class="main-page">
<ion-content>
<h1>Friend</h1>
<label class="item item-input">
<i class="icon ion-search placeholder-icon"></i>
<input ng-model="friend" name="friend" type="search" placeholder="Search" ng-change="change(friend)">
</label>
{{ data.friends[0].username }}
<ion-list ng-controller="TestFriendCtrl" >
<ion-item ng-repeat="friend in data.friends" class="item-thumbnail-left">
<p>{{friend.username}}</p>
</ion-item>
</ion-list>
</ion-content>
</ion-view>
$scope.friend
хорошо обновляется на выходе консоли, но мой список не изменяется.
Я попытался добавить $scope.$apply
но у меня уже есть $digest already in progress
Комментарий, указывающий, что angular.copy()
был почти правильным, просто отсутствовал второй параметр. Используя angular.copy()
(или аналогично Lodash's _.assign()
), вы не потеряете ссылку на исходный экземпляр массива. См. Этот ответ или этот ответ для дальнейшего объяснения.
.controller('TestFriendCtrl', ['$scope', 'APIUser', function($scope, APIUser) {
$scope.friends = [{username: 'test'}];
$scope.change = function(friend) {
APIUser.find(friend).$promise.then(function(success, data){
if (success) {
angular.copy(data, $scope.friends);
console.log($scope.friends);
}
}, function (err) {
console.log(err);
)};
}
}]);
После вашего последнего обновления, я предполагаю, что может иметь ссылку на. (Точка). В google есть много сообщений, которые можно легко найти, объясняя, почему это не так, чтобы иметь прямую модель без dd-dilimiter.
Попробуйте изменить свою модель с помощью $scope.myDatas.friends = data
; и измените ваш вызов ng-repeat на ng-repeat="friend in myDatas.friends"
Вы можете попробовать это, пока я не знаю, что делает APIUser
:
.controller('TestFriendCtrl', ['$scope', 'APIUser', function($scope, APIUser) {
$scope.friends = [{username: 'test'}];
$scope.change = function(friend) {
APIUser.find(friend).$promise.then(function(success, data){
if (success) {
$scope.friends = data;
console.log($scope.friends);
}
}, function (err) {
console.log(err);
)};
}
}]);