控制器在Angular JS中加载时调用服务

时间:2014-04-07 14:41:00

标签: angularjs

我是AngularJs的新手,我创建了一个服务,并希望在特定控制器加载时调用该服务。

我用于控制器的代码是:

sampleApp.controller('ProjectAppController', function ($scope, ProjectAppService) {
    ProjectBudgetService.save().then (
        function () {
            $location.url(''); 
        },
        function () { 
            $scope.error = true;
        }
    );
}

服务代码在这里:

sampleApp.factory('ProjectBudgetService', function ($http, $q) {
    return {
        save: function () {          
            var deferred = $q.defer();

            $http.get('http://lh-cip.ultraserve.net.au/project/budget/?',
                      { headers: { 'Authorization': $.session.get("loginToken") } }
            )
            .success(function (data) {
                if(data.options=="") { 
                    alert("No Budget Option.");
                } 
                else {
                    $q.options.push.apply($q.options, data.options);
                    $q.services.forEach(function(entry){
                        alert(entry);
                    });

                    deferred.resolve(); 
                } 
            })
            .error(function (err) {
                $('#al_msg').html('<div class="alert alert-danger"><span>Error! Can\'t Complete Login Process.</span><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button></div>'); deferred.reject(); 
            });

            return deferred.promise;
        }
    };
});

问题是此代码无效。我不知道问题出在哪里。请帮我解决一下。感谢

2 个答案:

答案 0 :(得分:1)

您将服务/工厂定义为ProjectBudgetService,但正在注入ProjectAppService

似乎只是一个简单的拼写错误,但会阻止您的服务/工厂正确地注入您的控制器。检查您的控制台,看看您遇到的错误。

答案 1 :(得分:0)

如果在控制器中使用$ watch,则可以在加载与控制器关联的页面时调用该服务。这样的事情。

$scope.$watch('$viewContentLoaded', function() {
    ProjectBudgetService.save().then( ... );
});