angularjs - Call from Plain JavaScript to Angular Service to Controller -


i using $rootscope.$emit() raising events service controller.

it working fine when emitting instance of service referenced in controller $rootscope.$on not getting called when emitting instance of service got angular injector in plain javascript .

following code

plain javascript

    var msghandlerjs = function () {     var injector = angular.injector(['ng', 'services']);     var amsghandlerservice = injector.get('msghandlerservice');      amsghandlerservice.testscopewatch(); } 

calling above when dom ready :

angular.element(document).ready(function () {         msghandlerjs(); }); 

service

(function (module) {          var msghandlerservice = function ($rootscope, $http, $q, $timeout) {           var testscopewatch = function () {             $http.get('~/test.json').then(function (result) {                 emailpacket = result.data.packet;                  $rootscope.$emit("emailpacketchanged", emailpacket);                  });         };          return {             //making public             testscopewatch:testscopewatch,         };     };      module.factory("msghandlerservice", ["$rootscope","$http", "$q","$timeout", msghandlerservice]);  }(angular.module("services"))); 

controller

(function (module) {        function testcontroller($rootscope,$scope, msghandlerservice) {         $rootscope.$on("emailpacketchanged", function(event,data){             alert('here am');         };     };      module.controller("testcontroller", ["$rootscope","$scope", "msghandlerservice",  testcontroller]);      }(angular.module('app'))); 

you need proper injector of application, angular.injector creates new injector, has nothing injector bootstrapped app. instance of service (yourservice, rootscope inside it) injector different instance in app. should instead use getter .injector() rootelement of application.

i.e if have ng-app or manually bootstrapping, injector out of element. example:

 var injector = angular.element(document.queryselector('[ng-app]')).injector(); 

if app root document (html) injector document i.e :

var injector = angular.element(document).injector() 

also if want scope bindings reflect need invoke digest cycle (alert work fine ofcourse):

var msghandlerjs = function() {    var injector = angular.element(document).injector();    var amsghandlerservice = injector.get('msghandlerservice');    var $rootscope = injector.get('$rootscope');    amsghandlerservice.testscopewatch();    $rootscope.$digest(); } 

(function(module) {      var msghandlerservice = function($rootscope, $http, $q, $timeout) {      var testscopewatch = function() {        //$http.get('~/test.json').then(function(result) {        //  emailpacket = result.data.packet;          $rootscope.$emit("emailpacketchanged", {});        // });      };        return {        //making public        testscopewatch: testscopewatch,      };    };      module.factory("msghandlerservice", ["$rootscope", "$http", "$q", "$timeout", msghandlerservice]);    }(angular.module("services", [])));    (function(module) {    function testcontroller($rootscope, $scope, msghandlerservice) {      $rootscope.$on("emailpacketchanged", function(event, data) {        $scope.got = "got message!!";      });    }      module.controller("testcontroller", ["$rootscope", "$scope", "msghandlerservice", testcontroller]);    }(angular.module('app', ['services'])));    var msghandlerjs = function() {      var injector = angular.element(document.queryselector('[ng-app]')).injector();    var amsghandlerservice = injector.get('msghandlerservice');    var $rootscope = injector.get('$rootscope');    amsghandlerservice.testscopewatch();    $rootscope.$digest();  }  angular.element(document).ready(function() {    msghandlerjs();  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>  <div class="test" ng-app="app" ng-controller="testcontroller">    {{got}}  </div>


Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -