У меня возникли проблемы при использовании нескольких экземпляров следующей директивы. Случайно, я верну неверный список в моем методе успеха. scope.type всегда «правильный»; то есть это то, что я прошел. Ответ иногда будет ответом от другого вызова.
директива:
angular.module('dincApp.directives').directive('lwSelect',
['$log', 'optionsService', '$http',
function ($log, optionsService, $http) {
return {
restrict: 'E',
replace: true,
scope:{
placeholder : '@',
type : '@'
},
link: function (scope, element, attr) {
$log.info('scope.type = ' + scope.type);
scope.options = {};
$http({method: 'GET', url: '/options/' + scope.type}).
success(function(data, status, headers, config) {
$log.info('scope.type = ' + scope.type);
$log.info('data = ' + JSON.stringify(data));
scope.options = data;
}).
error(function(data, status, headers, config) {
$log.debug('Error retrieving select options');
});
},
template:
'<select ng-options="option.key as option.value for option in options" ' +
'>' +
'<option value="">-- {{placeholder}} {{type}} --</option>' +
'</select>'
};
}]);
HTML-:
<lw-select id="stateSelect"
placeholder="State"
class="form-control"
name="state"
ng-model="profile.state"
type="State"
>
</lw-select>
Любые идеи? Я также пытался использовать ресурс $, но та же проблема возникает. Я не уверен, что это связано с директивой. Я испытал подобное поведение, когда я сделал несколько вызовов одного и того же $ ресурса в контроллере.
UPDATE:
Я переместил эту логику из директивы в контроллер и испытывает те же проблемы. Эти вызовы в контроллере будут работать некоторое время. Другие Я получу список государств, возвращенных странам, и наоборот. Это похоже на состояние гонки. Являются ли эти вызовы не отдельными экземплярами?
Контроллер:
optionsService.retrieve({optionType:"State"}).$promise.then(
function success(response) {
$log.debug('Options response for stateOptions:' + JSON.stringify(response));
$scope.stateOptions = response;
},
function failure() {
$log.error('Error retrieving select options');
});
optionsService.retrieve({optionType:"Country"}).$promise.then(
function success(response) {
$log.debug('Options response for countryOptions:' + JSON.stringify(response));
$scope.countryOptions = response;
},
function failure() {
$log.error('Error retrieving select options');
});
....
Ресурс:
angular.module('dincApp.services').factory('optionsService',
['$resource',
function ($resource) {
return $resource('/options/:optionType', {}, {
retrieve: { method: 'GET', isArray: true }
});
}]);
Это немного трудно сказать, что именно вы имеете в виду, но попробуйте установить переменную на ваш $ http return (т.е. обещание), а в «затем» установите данные. var val = $ http (....); val.then (функция (данные) {$ scope.options = data;}); Такого рода вещи – Scott
В принципе, у меня есть несколько экземпляров директивы на той же странице. Я думал, что использую изоляцию. scope.type выглядит корректно в моих журналах. Они случайным образом возвращают данные друг другу. –
, а не делать это по ссылке, сделать это в контроллере – Seminda