2014-01-13 60 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