Я заблокирован по этой проблеме уже пару часов, поэтому любая помощь очень ценится.
у меня есть контроллер, в котором я определил переменную (пустой массив):
function MainCtrl(scope, graph) {
scope.myVar = [];
graph.send("a", "b");
}
MainCtrl.$inject = ['$scope', 'plotData'];
plotData
— это пользовательский сервис, который я написал. Он использует $http
для запроса базы данных и получения нужных мне данных.
angular.module('myApp.services', []).
factory('plotData', ['$http', function(async) {
var mainScope = angular.element("#main").scope();
return {
send: function(plotType, plotDetail) {
var thisObj = this;
var ajaxConfiguration = {
method: 'POST',
url: '******************',
data: {
type: plotType,
detail: plotDetail
}
};
async(ajaxConfiguration).
success(function(data, status, headers, config) {
mainScope.myVar = data.plot;
/*
data.plot is what i expected!
I also try with: return data.plot;
*/
}).
error(function(data, status, headers, config) {
console.info("error");
});
},
doSomething: function(data) { },
doSomethingElse: function() { }
};
}]);
Проблема в том, что в контроллере scope.myVar
не меняется. По сути, я пытаюсь обновить переменную, определенную в контроллере, из директивы.
Что я делаю неправильно?
ОБНОВЛЕНИЕ:
@dogoku: насколько я знаю, мне не нужно использовать $apply, потому что я использую $http, который все еще находится в Angular.
@Марк Райкок:
0) Нет, я использую настоящий сервис $http:
factory('plotData', ['$http', function(async) {
/* service */
}]);
1) да, я написал в комментарии к коду. data.plot - это то, что я ожидал. Бэкенд-код отлично работает, поэтому я его не публиковал.
2) Я попробую вашу ссылку и дам вам знать.
Между тем любая помощь по-прежнему приветствуется.
async()
?? Кроме того, 1) если выconsole.log(data.plot)
видите ли вы свои данные? 2) получение области через селектор, а затем вызовscope()
не очень угловой. Лучшим способом было бы отправить обещание возврата: см. http-ответ в службе"> stackoverflow.com/questions/12505760/ - person Mark Rajcok   schedule 12.03.2013