Я только начинаю играть с angularJS, так что, возможно, я прошу что-то легко сделать, но я не могу найти способ сделать это. Ситуация следующая: у меня есть список, заполненный ng-repeat, который принимает значения из переменной контроллера области. Эта переменная загружается при загрузке страницы вызовом jsonp, и это отлично работает. Проблема возникает, когда мне нужно перезагрузить этот список на основе другого выбора. Например, если в элементе выбрать значение «день», мне нужно показать некоторые значения, и когда я выбираю «неделю», мне нужно показать других (также загруженных через ajax).Обновить список с angularjs
То, что я пробовал, заключается в том, что у меня есть служба, которая загружает данные и возвращает их, а в контроллере есть два метода: один для первой загрузки, а второй для второго, который выполняет $ scope.apply с переменной , Затем я вызываю этот второй метод при изменении значения выбора (я сделал это с помощью jquery, чтобы упростить его, пока не смогу это исправить).
Это часть моего HTML
<div x-ng-controller='LeaderboardCtrl'>
<select id='leaderboard-select'>
<option value='day'>day</option>
<option value='week'>week</option>
<option value='month'>month</option>
</select>
<div x-ng-repeat='p in leaderboard'>
<p>{{p}}</p>
</div>
</div>
И это часть коды, которая влияет на эту функцию
var lead = angular.module("lead",[]);
function LeaderboardCtrl($scope,$attrs,$http,jtlanService) {
$scope.leaderboard = [];
$scope.period = 'day';
var data = {
period:$scope.period
};
$scope.loadLeaderboard = function(){
myService.loadLeaderboard(data).then(function(leaderboard) {
$scope.leaderboard = [];
$scope.leaderboard.push.apply($scope.leaderboard,leaderboard);
});
}
$scope.reloadLeaderboard = function() {
myService.loadLeaderboard(data).then(function(leaderboard) {
$scope.$apply(function() {
$scope.leaderboard = [];
$scope.leaderboard.push.apply($scope.leaderboard,leaderboard);
});
});
}
$scope.loadLeaderboard()
}
lead.service("myService",["$http", function($http) {
var myService = {
loadLeaderboard : function(data) {
var promise = $http.jsonp("/widget/leaderboardJSONP?callback=JSON_CALLBACK&_="+new Date(),{
params:data,
cache:false,
ajaxOptions: { cache: false }
}).then(function(response) {
return response.data;
});
return promise;
}
};
return myService;
}]);
$("#leaderboard-select").change(function(){
scope.period = $("#leaderboard-select").val();
scope.reloadLeaderboard();
});
Вот скрипка с кодом: http://jsfiddle.net/WFGqN/3/
Если вы хотите использовать JQuery (в нижней части), вам необходимо включить JQuery. Из-за этого есть ошибка в вашей скрипке (проверьте консоль). – Langdon
Я обновил ссылку, теперь я думаю, что jQuery также включен в скрипт – Eylen