2015-05-01 2 views
1

Controller КодВызов функции обслуживания от контроллера в 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); 
    } 
]); 

Service Code

'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()?

ответ

1

Вот исправленный код услуги:

'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!"); 
     } 
    }; 
]); 

Функция обслуживания является завод, который в свою очередь возвращает действительную службу. Таким образом, он будет запускаться при первом запросе в качестве зависимости. То, как вы его написали, по сути, contribEmailService было бы undefined в вашей функции, потому что ваш завод фактически ничего не возвращал.

Надеюсь, это поможет!

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

}); 
Смежные вопросы