html-шаблон:
у меня есть элемент в файле шаблона seats.tpl.html, например:
<select id="guest_table">
<option tables="emptySeats"
ng-repeat="table in emptySeats" value="{{table.tableId}}">{{table.tableNumber}}</option>
</select>
контроллер
в контроллер я вызываю фабрику, чтобы получить значения из базы данных, на самом деле я загружаю результат в массив $scope.emptySeats, который в шаблоне с ng-repeat создает:
factP3_GetEmptyChairs.getEmptyChairs({'data': {'id': 58}})
.then(function (result) {
**$scope.emptySeats = result.data;**
$log.info("Empty chairs list loaded.");
},
function (result) {
$('.loading').hide();
$log.error("Error: we could not get Empty seats list.");
});
директива:
в моей директиве я использую параметр templateUrl для вызова файла шаблона, чтобы загрузить, опять же пока все хорошо, выбор загружается со значениями.
.directive('emptySeats',function(){
return {
restrict: 'AE',
replace: true,
scope:{tables :'='},
templateUrl: function(){
return 'assets/modules/part3/templates/emptySeats.tpl.html';
},
link:function(scope, element, attrs) {
//bind change on element
element.bind('change', function() {
alert("table changed");
});
}
}
Моя проблема в том, что всякий раз, когда я изменяю значения массива $scope.emptySeats, мне нужно автоматически обновлять значения, чего не происходит с моим текущим кодом.
что-то, что я упустил в директиве, я думаю, это компилируется, это наблюдается, это ngmodel, кто-нибудь может помочь?
ОБНОВЛЕНО: я вызываю функцию, чтобы получить новые данные из базы данных и загрузить их для выбора элемента
$scope.onClickHall = function (hall) {
var tmp = [];
//call service to load empty Seats
factP3_GetEmptyChairs.getEmptyChairs({'data': {'id': $scope.currentHall}})
.then(function (result) {
//$scope.emptySeats = result.data;
A: Если я использую $apply здесь, я получаю: Ошибка: действие $rootScope:inprog уже выполняется
$scope.$apply(function () {
$scope.emptySeats = result.data;;
});
tmp = result.data; //i use a temp array to pass it on timeout
$log.info("Empty chairs list loaded.");
},
function (result) {
$('.loading').hide();
$log.error("Error: we could not get Empty seats list.");
});
Б. если я использую функцию $timeout и пытаюсь изменить данные, ничего не происходит
$timeout(function() {
$scope.$apply(function () {
$scope.emptySeats = tmp;
});
}, 10);
}