在 AngularJS 中从控制器调用服务函数

Calling a Service function from a Controller in AngularJS

控制器代码

'use strict';

angular.module('MyApp').controller('ArticleContribEmailController', [

    '$scope', 'ArticleAppState', 'fbsUserDataService', 'contribEmailService',
    function ($scope, ArticleAppState, fbsUserDataService, contribEmailService ) {

        this.userChanged = function () {

            if (fbsUserDataService.initialized && fbsUserDataService.user && ArticleAppState.page_data) {

                // user has authenticated.
                contribEmailService.initForm();

            }

        };


        // watch for when user data is available, run userChanged.
        $scope.$watch(function() { return fbsUserDataService.user; }, this.userChanged);
        $scope.$watch(function() { return fbsUserDataService.initialized; }, this.userChanged);
    }
]);

服务代码

'use strict';

angular.module('forbesArticleApp').service('contribEmailService', [

    '$injector', '$route', 'ArticleAppState', 'fbsUserFormFactory', 'fbsUserDataService',

    function initForm ($injector, $route, ArticleAppState, fbsUserFormFactory, fbsUserDataService) {

        console.log("Hello world!");

    }

]);

我只想通过控制器中的调用触发 contribEmailService.initForm() 函数,但它会在页面加载后立即触发。

如何设置调用服务函数initForm()的时间?

这是更正后的服务代码:

'use strict';

angular.module('forbesArticleApp').service('contribEmailService', [
    '$injector', '$route', 'ArticleAppState', 'fbsUserFormFactory', 'fbsUserDataService',

function($injector, $route, ArticleAppState, fbsUserFormFactory, fbsUserDataService) {
    return {
      initForm: function() {
        console.log("Hello world!");
      }
    };
]);

服务函数是一个工厂,它将反过来 return 实际服务。所以它会 运行 第一次被请求作为依赖项。实际上,按照您编写的方式,contribEmailService 会在您的函数中 undefined,因为您的工厂实际上并没有 return 任何东西。

希望对您有所帮助!

controller:-
blogcontroller is controller name

app.controller('blogController', function($scope, $compile,  $http, blogAuth, AppInfo, $location,$element){

$scope.blog_abuse = function(blog_id)
    {

        blogAuth.BlogAbuse(blog_id).then(function(response)
        { 
            $scope.DetailblogList.is_abused = response.records.is_abused;
        },function(error){
        });
    }
});


service:-

app.factory('AppInfo', function(){
    return {
        serviceURL:site_url
    };
});

app.service('blogAuth', function($http, $rootScope, $q, AppInfo){

this.BlogAbuse = function(blog_id){
    var deferred = $q.defer();
    var pageObj ={"blog_id":blog_id};   

        $http.post(AppInfo.serviceURL+'blog/blog_abuse',pageObj).success(function(data){
            deferred.resolve(data);
        }).error(function(msg, code) {        
            console.log('error', code, msg );
        });
        return deferred.promise;
    }

});