Я строю своего рода социальную сеть, где у меня есть угловая директива, которая нажимает дальше, будет следовать за человеком. Рядом с сообщением появится следующая кнопка. Так что, если персонаж 3 раза, кнопка будет повторяться 3 раза. Но когда я нажимаю на одну следующую кнопку, другие 2 не показывают тот же результат. они остаются прежними.
Итак, вопрос в том, как я могу синхронизировать другие 2 кнопки?
Вот как работает мой код. Это сообщение пользователя, у него есть кнопка внизу справа
И это когда я нажимаю на сообщение, у него будет модальное всплывающее окно, показывающее более подробную информацию о сообщении, как когда вы нажимаете на изображение в facebook.
Тогда проблема в том, что когда я нажимаю пальцем вверх в модальном всплывающем меню, он не синхронизируется с большим пальцем в исходном
Это код для голосования
VoteButtons.link = function (scope, ele, att) {
var post_id = att.voteButtons;
scope.up_vote_class = 'default';
scope.down_vote_class = 'default';
scope.up_votes_number = 0;
scope.down_votes_number = 0;
scope.post_id = post_id
var up_votes_id = [];
var down_votes_id = [];
if (post_id) {
$http.get('/api/posts/get-votes/' + post_id).success(function (res) {
if (res && !res.error) {
up_votes_id = res.response.up_votes;
down_votes_id = res.response.down_votes;
if (up_votes_id) {
scope.up_votes_number = up_votes_id.length;
}
if (down_votes_id) {
scope.down_votes_number = -down_votes_id.length;
}
if ($rootScope.user && up_votes_id && up_votes_id.indexOf($rootScope.user._id) != -1) {
scope.up_vote_class = 'success';
}
if ($rootScope.user && down_votes_id && down_votes_id.indexOf($rootScope.user._id) != -1) {
scope.down_vote_class = 'danger';
}
}
})
scope.thumb_up = function () {
$http.post('/api/posts/up-vote/' + post_id).success(function (res) {
if (res && !res.error) {
up_votes_id = res.response.up_votes;
down_votes_id = res.response.down_votes;
if (up_votes_id) {
scope.up_votes_number = up_votes_id.length;
}
if (down_votes_id) {
scope.down_votes_number = -down_votes_id.length;
}
if ($rootScope.user && up_votes_id && up_votes_id.indexOf($rootScope.user._id) != -1) {
scope.up_vote_class = 'success';
Socket.emit('thumb_up',res.response)
} else {
scope.up_vote_class = 'default';
}
if ($rootScope.user && down_votes_id && down_votes_id.indexOf($rootScope.user._id) != -1) {
scope.down_vote_class = 'danger';
} else {
scope.down_vote_class = 'default';
}
} else {
$rootScope.alerts = res.error.message;
}
})
}
scope.thumb_down = function () {
$http.post('/api/posts/down-vote/' + post_id).success(function (res) {
if (res && !res.error) {
up_votes_id = res.response.up_votes;
down_votes_id = res.response.down_votes;
if (up_votes_id) {
scope.up_votes_number = up_votes_id.length;
}
if (down_votes_id) {
scope.down_votes_number = -down_votes_id.length;
}
if ($rootScope.user && up_votes_id && up_votes_id.indexOf($rootScope.user._id) != -1) {
scope.up_vote_class = 'success';
} else {
scope.up_vote_class = 'default';
}
if ($rootScope.user && down_votes_id && down_votes_id.indexOf($rootScope.user._id) != -1) {
scope.down_vote_class = 'danger';
} else {
scope.down_vote_class = 'default';
}
} else {
$rootScope.alerts = res.error.message;
}
})
}
}
}
Чтобы сообщить об изменениях ко всем другим экземплярам директивы, вы можете использовать стиль pub/sub. Это можно сделать, если транслировать событие с помощью $rootScope.$broadcast
который, возможно, передает iD новой вещи.
Затем событие может быть прослушано всеми вашими директивами и после обратного вызова проверить, связана ли директива с этой вещью. Если это так, обновите состояние кнопки.
Трудно объяснить, но я надеюсь, что вы поймете логику моего подхода.
И, надеюсь, это поможет вам!