2016-03-24 3 views
1

У меня есть функция внутри службы в угловом модуле, но как мне запустить службу при загрузке страницы. Я не использую любой контроллер здесьКак запустить службу при загрузке страницы

Код:

var app = angular.module("myTmoApppdl", []) 
     .service('populatePageObjsService', function() { 

      var self = this; 

      //digitalData is a global object 
      self.populatePage = function (digitalData) { 
       var dataPageObject = document.getElementById('metaJson').getAttribute("data-pageObject"); 
       var jsonPageObject = JSON.parse(dataPageObject); 

       for (var key in jsonPageObject.page.pageInfo) { 
        var value = jsonPageObject.page.pageInfo[key]; 
        if (digitalData.page.pageInfo.hasOwnProperty(key)) { 
         digitalData.page.pageInfo[key] = value; 
        } 
       } 
       console.log("Page data populated successfully: ", digitalData.page.pageInfo); 
      }(); 
     }); 

Я попытался с помощью () после функции, но не выполнить функцию

Update:

var app = angular.module("myTmoApppdl", []).run(function() { 
    app.service('populatePageObjsService', function() { 
     var self = this; 
     self.populatePage = function (digitalData) { 
      var dataPageObject = document.getElementById('metaJson').getAttribute("data-pageObject"); 
      var jsonPageObject = JSON.parse(dataPageObject); 

      for (var key in jsonPageObject.page.pageInfo) { 
       var value = jsonPageObject.page.pageInfo[key]; 
       if (digitalData.page.pageInfo.hasOwnProperty(key)) { 
        digitalData.page.pageInfo[key] = value; 
       } 
      } 
      console.log("Page data populated successfully: ", digitalData.page.pageInfo); 
     }; 
    }); 
}); 

ответ

2

Вы можете позвоните по вашему методу обслуживания в .run() блок

var app = angular.module("myTmoApppdl", []); 
app.run(function(populatePageObjsService){ // inject your service here 
    //use your service here 
}); 
app.service('populatePageObjsService', function() { 
    // your service code here 
}); 
+0

Есть ли другие способы также для достижения того же. Просто для информации. Спасибо – Satyadev

+0

Он не работает – Satyadev

+0

Он должен работать. Можете ли вы воспроизвести проблему где-то для меня, чтобы посмотреть на – nikhil

2

С run module

Простой пример

var app = angular.module("myTmoApppdl", []) 
    .run(function(populatePageObjsService) { 
    populatePageObjsService.init(); 
    }) 
    .service('populatePageObjsService', function() { 

    var self = this; 

    self.init = function() { 
     alert("run"); 
    }; 
    }); 

Plunker

1

Поскольку служба AngularJS является одноточечно, вы можете быть уверены, что ваша функция будет выполняться только один раз, но у вас есть иметь в виду, что он также ленивый экземпляр - Угловой только instan обслуживает сервис, когда компонент приложения зависит от него - source.

С учетом этого, если услуга как-то самонадежна (например, выборка страны пользователя с помощью вызова API), поскольку это может быть выполнено только один раз в начале приложения, и маловероятно, чтобы данные изменение), помимо обычных служебных привязок, вы также можете поставить туда логику.

Я отредактировал ваш код, чтобы продемонстрировать этот подход.

angular 
    .module("myTmoApppdl", []) 
    // populatePageObjsService needs to be injected somewhere otherwise it won't get instantiated 
    .service('populatePageObjsService', function() { 
     ////////////// 
     // Bindings // 
     ////////////// 

     var self = this; 

     //digitalData is a global object 
     self.populatePage = function(digitalData) { 
      var dataPageObject = document.getElementById('metaJson').getAttribute("data-pageObject"); 
      var jsonPageObject = JSON.parse(dataPageObject); 

      for (var key in jsonPageObject.page.pageInfo) { 
       var value = jsonPageObject.page.pageInfo[key]; 
       if (digitalData.page.pageInfo.hasOwnProperty(key)) { 
        digitalData.page.pageInfo[key] = value; 
       } 
      } 
      console.log("Page data populated successfully: ", digitalData.page.pageInfo); 
     }; 

     /////////////// 
     // Run Block // 
     /////////////// 

     // Calling the desired function. 
     self.populatePage(digitalData); 
    }); 
+0

Все еще нужно впрыснуть, и никакой контроллер не использует в вопросе. –

+0

ya не работает. Я попробовал это уже – Satyadev

+0

@JoseRocha True. Без ввода услуги он не будет инициализирован. –

0

angular.element(document).ready(function() {

// your code here 

});

Смежные вопросы