2017-04-13 4 views
0

Ich habe einige App in AngularJs, und ich habe ein Problem festgestellt. Ich muss eine Funktion vom Dienst im Controller aufrufen.AngularJs, die Service-Funktion vom Controller anrufen

meinen Dienst:

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

mein Controller:

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

Funktion printSmth von ng-init in html genannt wird, und ich bekomme Ausnahme sagen, dass dataService.print keine Funktion ist.

Kennt jemand den richtigen Weg, es zu tun? Ich kann es nicht ändern zu .Service muss so gemacht werden.

Antwort

1

versuchen, wie unten ..

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

oder

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

@egzaell aktualisiert und es funktioniert! Danke – egzaell

+0

Willkommen @egzaell –

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

ändern dataService zu DataService

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

Die Funktion, die Sie in der Steuerung definiert haben, kann in der Ansicht nicht aufgerufen werden, es sei denn, sie ist eine $scope Funktion.

So stellen Sie die Druckfunktion in Ihrem Controller

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

Nö, ich bin immer die gleiche Ausnahme, und über diese Art von in diesem Controller denke, ich habe – egzaell

+0

einen Blick @egzaell –

+0

Haben Sie Zugriff auf Vars in Dataarbeits ich die Antwort –

1

Der beste Weg zu sein, was Sie erreichen wollen wäre etwas wie:

Service:

/* 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'); 
    } 
} 

Controller:

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

Ich empfehle Ihnen, beginnen einige style guides for AngularJS zu lesen. Sie werden Ihr Leben und Ihr Entwicklungsteam in Zukunft produktiver machen.

+1

Es ist ein gutes Beispiel mit einigen guten Praktiken geschrieben. Bitte beziehen Sie sich darauf. –

+0

es ist wirklich gut, aber nicht in meinem Fall – egzaell

Verwandte Themen