如何在页面加载时运行服务

时间:2016-03-24 12:50:01

标签: javascript angularjs

我在角度模块中有服务内部服务但是如何在页面加载时运行服务。我这里没有使用任何控制器

代码:

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);
            }();
        });

我尝试使用()之后的函数,但它没有执行函数

更新

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);
        };
    });
});

4 个答案:

答案 0 :(得分: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
});

答案 1 :(得分: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

答案 2 :(得分:1)

由于AngularJS服务是 singleton ,您可以确定您的函数只会执行一次,但您必须记住它也懒惰地实例化 - Angular仅在应用程序组件依赖它时实例化服务 - source

考虑到这一点,如果某项服务在某种程度上是自我可靠的(例如,通过API调用获取用户的国家/地区 - 因为这只能在应用程序启动时执行一次,并且它可以执行#39 ;不太可能改变数据),除了通常的服务绑定之外,你还可以在其中放置逻辑。

我已经编辑了您的代码以展示这种方法。

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);
    });

答案 3 :(得分:0)

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

// your code here

});