我在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必须以这种方式完成。
答案 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();
}