я сфера под названием $scope.users
, который возвращает всех пользователей в моем приложении, как так,Сравните два набора объектов
[{"id":1,"name":"Peter Boomsma"},
{"id":2,"name":"Jan Jansen"},
{"id":3,"name":"Kees Keesen"},
{"id":4,"name":"Piet Pietersen"}]
Тогда у меня есть сфера называется $scope.current_user
, который возвращает текущие пользователи, и корочки пользователей он следует,
{"id":4,"name":"Piet Pietersen","following":[
{"id":1},{"id":2},{"id":4}]
}
у меня есть нг-повтор, которая показывает все пользователь, и followUser
действия для каждого пользователя,
%ul{"ng-repeat" => "user in users"}
%li
name: {{ user.name }}
%a{"ng-click" => "followUser(user)"} Follow user.
Проблема заключается в том, что я не могу различать пользователя, который уже выполняется, и пользователя, которого не соблюдают. Таким образом, действие followUser
всегда есть. Я хотел бы дать пользователям, что текущий пользователь выполняет различные действия, такие как unfollowUser
.
У меня есть идентификаторы пользователей, за которыми следует текущий пользователь, но я не знаю, как предоставить этим пользователям другую кнопку. Что-то вроде unfollowUser
.
* обновление *
Я получил это работает (по крайней мере, несколько), используя Mihail его предложение,
Когда я иду в шаблон пользователя Загружаю userCtrl,
usersService.loadUsers().then(function(response) {
$scope.users = response.data;
angular.forEach(response, function(user){
$scope.user = user
$scope.isFollowed = function(userId) {
var following = $scope.current_user.following;
for (var i=0; i<following.length; i++) {
if (following[i].id == userId) {
return true;
}
}
return false;
}
})
})
И в моем шаблоне у меня есть,
%ul{"ng-repeat" => "user in users"}
%li
name: {{ user.name }}
%a{"ng-click" => "followUser(user)", "ng-show" => "!isFollowed(user.id)"} follow
%a{"ng-click" => "unfollowUser(user)", "ng-show" => "isFollowed(user.id)"} unfollow
Это прекрасно работает. Когда пользователь следит, используется функция unfollowUser. Проблема в том, что когда я отключаю пользователя от пользователя, представление не обновляется. Я должен обновить страницу, чтобы увидеть эффект отменить подписку.
Я попытался положить init
в конце действий unfollowUser, как это так,
$scope.unfollowUser = function(user){
unfollowFriend.unfollowFriend(user).then(function(){
},function(){
}).then(init);
Notification.success(user.name + ' is verwijderd als vriend.');
}
первонача
var init = function(){
console.log ('renew')
usersService.loadUsers().then(function(response) {
$scope.users = response.data;
angular.forEach(response, function(user){
$scope.user = user
$scope.isFollowed = function(userId) {
var following = $scope.current_user.following;
for (var i=0; i<following.length; i++) {
if (following[i].id == userId) {
return true;
}
}
return false;
}
})
})
}
Я получаю renew
сообщений в моем журнале браузера, но просмотр не обновляется.
Я upvoted ответ MrRanos. Его концепция верна, но реализация этого будет иметь значение, так как ваша пользовательская база и последователи увеличиваются. Вы должны изменить свой массив 'follow', чтобы быть объектом, хранящим идентификаторы пользователя как ключи. Вы можете хранить что-то в значении, относящемся к пользователю, но это не имеет значения для требований, которые вы опубликовали.Это приведет к постоянному выполнению вашего алгоритма по времени, когда вы ищете конкретный идентификатор пользователя (ключ), а не итерацию через гигантский массив последователей. – Haymaker87
Я согласен с @ Haymaker87, когда у вас огромное количество пользователей, это не будет хорошим решением. Я предлагаю, чтобы в вашей функции init после загрузки пользователей вы могли добавить атрибут для каждого пользователя, если он соблюден или нет. Затем на основе этого атрибута выполните проверку. Также, когда вы хотите следовать или отменить подписку на пользователя, вам необходимо обновить атрибут, чтобы представление было обновлено. –
Благодарим вас за ввод. Вы говорите, что> обновите атрибут, чтобы представление было обновлено, но какой атрибут это будет? Потому что я использую пользователей для отображения пользователей, и когда пользователь следует/отменяет, что изменение находится внутри контроллера отношений. –