我在這個問題上被阻止了幾個小時,因此任何幫助都非常感謝。
我的控制器,其中i的定義的變量(一個空數組):
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
不會改變。 基本上我想要做的是從指令更新控制器中定義的變量。
我在做什麼錯了?
UPDATE:
@dogoku:正如我知道我不需要使用$適用,因爲我使用$ HTTP仍處於角。
@馬克Rajcok:
0)不,我使用的是真正的$ http服務:
factory('plotData', ['$http', function(async) {
/* service */
}]);
1)是的,我在代碼註釋中寫道。 data.plot是我所期望的。後端代碼效果很好,所以我沒有發佈它。
2)我會嘗試你的鏈接,讓你知道。
同時任何幫助仍然歡迎。
見沒有ü嘗試到的範圍。$消化或範圍。$更新後的應用?我瀏覽了代碼,但我沒有看到它 – Dogoku 2013-03-11 22:52:51
「它使用$ http來查詢數據庫」 - 它看起來像使用了一些'async()'函數?另外,1)如果你'console.log(data.plot)'你看到你的數據嗎? 2)通過選擇器獲取範圍,然後調用scope()並不是非常有用。更好的方法是發送退貨承諾:請參閱http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service/12513509#12513509 – 2013-03-12 00:46:22
@MarkRajcok和Dogoku - 我更新了問題對你的評論的答案。 – Bruno 2013-03-12 08:14:07