AngularJs从控制器调用服务功能

时间:2017-04-13 09:20:52

标签: javascript angularjs

我在AngularJs中有一些应用程序,我遇到了一个问题。我需要从控制器中的服务调用一个函数。

我的服务:

var DataService = ['$http', '$q', '$window', 'alert', function ($http, $q, $window, alert) {
    function print () {
        console.log('smth');
    }
}

我的控制员:

var Controller = function ($scope, $state, OffersService, commonFunction, dataService, alert, blockUI) {
    function printSmth () {
        dataService.print();
    }
}

函数printSmth在html中从ng-init调用,我得到异常,说dataService.print不是函数。

有人知道这样做的正确方法吗?我无法将其更改为.service必须以这种方式完成。

3 个答案:

答案 0 :(得分:1)

尝试如下..

var DataService = ['$http', '$q', '$window', 'alert', function ($http, $q, $window, alert) {
   this.print = function () {
        console.log('smth');
    };
}

var DataService = ['$http', '$q', '$window', 'alert', function ($http, $q, $window, alert) {
       function print() {
            console.log('smth');
        };
       return {
        print: print
       };
}

答案 1 :(得分:1)

您希望完成的最佳方式是:

服务:

/* recommended */

// dataservice factory
angular
    .module('app.core')
    .factory('dataservice', dataservice);

dataservice.$inject = ['$http', '$q', '$window', 'alert'];

function dataservice($http, $q, $window, alert) {
    return {
        print : print 
    };

    function print () {
        console.log('smth');
    }
}

控制器:

/* recommended */

// controller calling the dataservice factory
angular
    .module('app.avengers')
    .controller('YourController', YourController);

YourController.$inject = ['$scope', '$state', 'OffersService', 'commonFunction', 'dataservice', 'alert', 'blockUI'];

function YourController($scope, $state, OffersService, commonFunction, dataservice, alert, blockUI) {
    $scope.printSmth = function printSmth() {
           dataService.print();
    };
}

我建议你开始阅读一些style guides for AngularJS。您将在未来提高您的生活和开发团队的工作效率。

答案 2 :(得分:0)

var Controller = function ($scope, $state, OffersService, commonFunction, dataService, alert, blockUI) {

dataService更改为DataService

---------------- UPDATE --------------------

除非是$scope函数,否则无法在视图中访问您在控制器中定义的函数。

因此,请将控制器中的打印功能设为

$scope.printSmth = function () {
    dataService.print();
}