Angularjs - 为自调用函数添加服务

时间:2018-04-11 19:30:56

标签: angularjs

我正在重新设计我的应用以在加载数据后加载页面。我有数据,但我需要把它交给我的其他两个控制器。我在我的主app.js中有一个自我激发的功能。我也有服务。

我无法弄清楚如何在函数中引用服务,所以我可以在那里添加数据。因此,可以从我的其他控制器访问。

这是app.js,我需要引用服务和服务本身的功能。我将发布完整的代码。

var app = angular.module('UtilityApp', ['ngRoute', 'ngDialog', 'uiSwitch', 'ui.select', 'ngResource', 'ui.bootstrap'])
.config(

    [ '$routeProvider', function($routeProvider) {
        $routeProvider.when('/edit', {
            templateUrl: 'templates/login-page.html',
            controller : 'LoginController'
        });

        $routeProvider.otherwise({
            resolve:{
                'LoginServiceData':function(LoginService){
                    return LoginService.promise;
                }},
            templateUrl: 'templates/Homepage.html'
        });

    }]);
(function($scope, UserService) {

var initInjector = angular.injector(['ng']);
var $http = initInjector.get('$http');


    $http.get('rest/userdata/').
    success(function (data) {

       //  angular.module('metadata', []).constant('userdata', data);
        // UserDataService.setUserData(data);
        angular.element(document).ready(function() {
            angular.bootstrap(document, ['UtilityApp']);

        });

    }).
    error(function (error) {
        console.log(error.message);
    });

setInterval(function(){
    $scope.getMetaData();
}, 300000);

})();

希望有一种方法可以在函数中使用UserService。我将其添加为参数,但无法找到setUserData。

修改 我需要一种方法来获取$ http.get中的数据到我在其他js文件中没有显示的其他控制器

1 个答案:

答案 0 :(得分:1)

您的应用结构错误。您不应该尝试在IIFE中加载数据然后引导AngularJS应用程序。在AngularJS中完成所有操作,如下所示。有myDataService处理加载和提供数据。有一个.run()块会在应用启动后立即触发数据加载。然后,您可以根据需要在应用中禁用功能,直到myDataService.dataLoaded标志设置为true。

var app = angular.module("app", [ngRoute]);

app.service("myDataService", function($http) {
  var service = this;
  service.data = [];

  service.dataLoaded = false;

  service.loadData = function() {
    return $http.get("/my/data/url")
      .then(function(response) {
        service.data = response.data;
        service.dataLoaded = true;
      });
  };

});

app.run(function(myDataService) {
  myDataService.loadData();
});