Unknown provider: $rootElementProvider when using $injector to get $location service before angular.bootstrap

后端 未结 2 1555
醉梦人生
醉梦人生 2021-01-02 07:26

Hello I am trying to manually bootstrap an angular app, but there is some business that needs to be taken care of first.This article mentions the technique I am interested i

相关标签:
2条回答
  • 2021-01-02 07:45

    root element must be in inserted in document. See http://plnkr.co/edit/OrgStgw4NpjU2LcIFXsB

    var rootElement = angular.element(document);
    
    var mockApp = angular.module('mockApp', []).provider({
      $rootElement:function() {
         this.$get = function() {
           return rootElement;
        };
      }
    });
    
    0 讨论(0)
  • 2021-01-02 07:54

    In order to get the $location before bootstrapping, you would basically need to provide the $rootElement. One way is to mock it: inject ngMock module from angular-mocks to get the injector.

    var $injector= angular.injector(['ng','ngMock',"plunker"]);
    var $location = $injector.get("$location");
    

    Plunker

    Or supply rootElement on your own by creating a mock app and including that while getting the injector.

    var mockApp = angular.module('mockApp', []).provider({
      $rootElement:function() {
         this.$get = function() {
           return angular.element('<div ng-app></div>');
        };
      }
    });
    
    var $injector= angular.injector(['ng','mockApp',"plunker"]);
    
    var $location = $injector.get("$location");
    

    Plunker

    Or other way (based on your feasibility) is to obtain the location from the window using window.location.

    Also worthwhile noting this thread on github

    0 讨论(0)
提交回复
热议问题