2014-01-13 62 views
2
  1. 我想從我的遺留代碼獲得服務,並運行到一個奇怪的錯誤與injector()返回undefined:注射器返回未定義的值?

    Check this plnkr


  • 此外,我試圖將新的屬性值返回到服務,這將反映到範圍而不使用手錶?
  • 非常感謝你,任何指針或建議,非常感謝。

    回答

    7

    您正在嘗試在構建DOM之前獲取該元素。這與在$(document).ready()之外運行JavaScript基本相同。所以這條線沒有元素獲得:

    var elem = angular.element($('#myCtr')); 
    

    另外,順便說一下,而不是使用jQuery,對於上面做另一個角度的選擇是:

    var elem = angular.element(document.querySelector('#myCtr')) 
    

    角度提供了一個相當於$(document).ready()angular.element(document).ready()我們可以使用。

    但是,您還需要抓取scope並在scope.$apply()內執行更改,以便Angular知道您已更改了應該注意的內容。

    結合使用這兩種我們得到:

    angular.element(document).ready(function() { 
    
        var elem = angular.element($('#myCtr')); 
        //get the injector. 
        var injector = elem.injector(); 
    
        scope= elem.scope(); 
    
        scope.$apply(function() { 
         injector.get('cartFactory').cart.quantity = 1; 
        }); 
    }); 
    

    updated plnkr

    +0

    喜KayakDave,非常感謝你的幫助。在這種情況下,我試圖說明我的情況,我試圖操作角碼(從遺留代碼部分)以外的服務數據,這就是爲什麼我試圖使用該元素來抓取注入器的原因。所以我想你是對的,dom還沒有被構建,也許我可以通過將代碼放入控制器外部的超時模塊來進行模擬。 – mr1031011

    +0

    有沒有可能有角度調用你的遺留代碼,並讓它知道Angular已完成自舉? – KayakDave

    +0

    當然,如果angular在引導完成時有一個回調函數,我肯定可以把這段代碼放到我的代碼中。 – mr1031011