2017-04-13 65 views
0

我在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它必須這樣做。

回答

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

和它的作品!謝謝 – egzaell

+0

歡迎@egzaell –

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

變化dataServiceDataService

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

您在控制器中定義的功能無法在視圖中訪問,除非其功能爲$scope

因此,請打印功能在您的控制器是

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

沒了,我得到了同樣的異常,以及有關那種在控制器我有工作訪問瓦爾在DataService的 – egzaell

+0

思維看一看@egzaell –

+0

我更新了答案@egzaell –

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(); 
    }; 
} 

我建議你開始閱讀一些​​3210。您將使您的生活和您的開發團隊在未來更高效。

+1

這是一個很好的例子,使用一些良好的做法編寫。請參考這個。 –

+0

這真的很好,但不是在我的情況 – egzaell

相關問題