2013-03-11 7 views
0

我在這個問題上被阻止了幾個小時,因此任何幫助都非常感謝。

我的控制器,其中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)我會嘗試你的鏈接,讓你知道。

同時任何幫助仍然歡迎。

+0

見沒有ü嘗試到的範圍。$消化或範圍。$更新後的應用?我瀏覽了代碼,但我沒有看到它 – Dogoku 2013-03-11 22:52:51

+1

「它使用$ 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

+0

@MarkRajcok和Dogoku - 我更新了問題對你的評論的答案。 – Bruno 2013-03-12 08:14:07

回答

1

正如評論中提到的,通過選擇器獲取範圍,然後調用scope()並不是非常有用。更好的方法是從服務中返回承諾。皮特對如何做到這這裏一個很好的例子:https://stackoverflow.com/a/12513509/215945

angular.copy()應使用,而不是在成功()回調的分配,從而使數據綁定未在控制器丟失。

https://stackoverflow.com/a/15345762/215945

+0

我嘗試了您的第一條評論中提出的解決方案(http://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service/12513509#12513509)......我不知道這一個也會工作。 – Bruno 2013-03-12 18:18:56

0

似乎可疑的唯一的事情是你如何得到主要適用範圍,因爲當我嘗試調用

angular.element('#something'); 

與AngularJS 1.0.5或1.1.3我收到以下錯誤:

selectors not implemented

當您打開開發人員工具時,您可以看到here。 這也可以解釋爲什麼你的範圍的屬性沒有更新。

+0

如果jQuery在Angular之前加載,選擇器將工作。我認爲@Bruno使用jQuery,但也許他不是。 – 2013-03-12 14:10:38

+0

@MarkRajcok好吧,那會有道理的。我沒有想過這個。 – 2013-03-12 14:40:37

相關問題