#javascript #angularjs #angularjs-ng-click
#javascript #angularjs #angularjs-ng-click
Вопрос:
Я пытаюсь составить список друзей. Я настроил ее так, чтобы пользователь мог искать друзей и нажимать на их изображение, чтобы увидеть их профиль, это приведет их к профилю, где отображается информация, которая у меня есть в массиве в моем сервисе. У меня есть кнопка «добавить друга», которая при нажатии превращается в кнопку «удалить друга» и должна добавить этого друга в новое представление html. Есть несколько проблем, с которыми я сталкиваюсь, и, похоже, я не могу разобраться. 1) кнопка меняется для каждого пользователя, когда нажимается только на 1 профиль пользователя. 2) пользователь не добавляется в представление друзей.
Вот мой сервисный код:
var friendProfile = {};
var userFriends = [];
this.addFriend = function(profileObj) {
userFriends.push(profileObj);
};
this.removeFriend = function(profileObj) {
for( var i = userFriends.length - 1; i >= 0; i--) {
if (userFriends[i].name === profileObj.name) {
userFriends.splice(i, 1);
}
}
};
Вот мой контроллер:
$scope.friendProfile = {};
$scope.userFriends = [];
$scope.currentlyFriends = false;
$scope.addFriend = function(profileObj) {
mainSvrc.addFriend($scope.friendProfile );
$scope.currentlyFriends = true;
};
$scope.removeFriend = function(profileObj) {
mainSvrc.removeFriend
($scope.friendProfile);
$scope.currentlyFriends = false;
};
Вот HTML:
/*profile view with buttons*/
<button class="friend-profbutton"
ng-click="addFriend(friendProfile)"
ng-hide="currentlyFriends">ADD FRIEND</button>
<button class="friend-profbutton"
ng-click="removeFriend(friendProfile)"
ng-show="currentlyFriends">REMOVE FRIEND</button>
</div>
/*friends list it should be coming too*/
<div ng-repeat="friend in userFriends" ui-sref="friend-profile({id:friend.id})" class="picture-wrapper">
<img ng-src="{{friends.profileUrl}}" class="friend-profilePic">
<div class="box">
<div class="overlay">
<p class="overlay-text">{{friends.name}}</p>
<a class="view-proflink">View Profile</a>
</div>
</div>
</div>
.state('friend-search', {
url: '/friend-search',
templateUrl: '/views/templates/friend-search.html',
controller: 'friendSearchCtrl'
})
.state('friend-profile', {
url: '/friend-profile/:id',
templateUrl: 'views/templates/friend-profile.html',
controller: 'friendProfileCtrl'
})
.state('friends', {
url: '/friends',
templateUrl: '/views/templates/friends.html',
});
Может кто-нибудь увидеть, что я могу делать неправильно?
Комментарии:
1. Похоже, проблема с кэшированием, как вы перенаправляете из списка друзей в профиль. Вы используете ui-router или ng-route
2. @SanketBajoria Я использую пользовательский интерфейс-маршрутизатор
3. Можем ли мы получить ваш $stateProvider .state со страницы профиля, пожалуйста?
4. @Wandrille Я добавил это выше
5. ваша функция addFriend из вашего сервиса работает хорошо? потому что она ничего не возвращает.
Ответ №1:
В своем служении вы ничего не получаете взамен.
Можете ли вы попробовать на своем сервисе:
this.userFriends = [];
this.addFriend = function(profileObj) {
this.userFriends.push(profileObj);
};
this.removeFriend = function(profileObj) {
for( var i = this.userFriends.length - 1; i >= 0; i--) {
if (this.userFriends[i].name === profileObj.name) {
this.userFriends.splice(i, 1);
}
}
};
и в вашем контроллере:
$scope.friendProfile = {};
$scope.userFriends = mainSvrc.userFriends ;
$scope.currentlyFriends = false;
$scope.addFriend = function(profileObj) {
mainSvrc.addFriend($scope.friendProfile );
$scope.userFriends = mainSvrc.userFriends ;
$scope.currentlyFriends = true;
};
$scope.removeFriend = function(profileObj) {
mainSvrc.removeFriend($scope.friendProfile);
$scope.currentlyFriends = false;
$scope.userFriends = mainSvrc.userFriends ;
};
и правильно:
<div ng-repeat="friend in userFriends" class="picture-wrapper">
<div ui-sref="friend-profile({id:friend.id})">
<img ng-src="{{friend.profileUrl}}" class="friend-profilePic">
<div class="box">
<div class="overlay">
<p class="overlay-text">{{friend.name}}</p>
<a class="view-proflink">View Profile</a>
</div>
</div>
</div>
</div>
Комментарии:
1. Похоже, достигнут некоторый прогресс. Это привело к моему блоку и наложению, но не принесло никакой пользовательской информации, которую я сохранил в другом массиве. Может быть, это потому, что я помещаю ее в пустой массив?
2. у вас есть ng-repeat=»friend в userFriends», поэтому вам нужно написать friend.something, а не friends.something
3. все та же проблема. Я могу разобраться в этом подробнее. Тот факт, что он переносит поле и накладывает его, потрясающий! Спасибо!
4. Несколько. Кнопка по-прежнему меняется с «добавить» на «удалить» во всех профилях друзей, когда она нажата только на одном из них, и после нажатия кнопки пользовательские данные не проходят, только наложение.
5. Я думаю, что мои представления перепутаны или я не извлекаю данные из своего исходного массива. Потому что все, с чем вы мне помогли, работает, но оно не извлекает идентификатор из массива, который у меня уже есть, в новый массив userFriends.