/ / Comment obtenir des données du contrôleur vers Factory dans angularjs - javascript, angularjs, angularjs-directive

Comment obtenir des données du contrôleur à l'usine en angularjs - javascript, angularjs, angularjs-directive

Je suis un débutant au monde Angularjs. Je veux récupérer des données du contrôleur angularjs vers Angularjs Factory.Controller et factory sont définis dans différents fichiers js.

code de l'usine (nom de fichier Application.js)

  var app=angular.module("myApp",[])

app.factory("autoCompleteDataService", [function(MyController) {
return {
getSource: function() {
return  MyController.getFirstName();

}
}

}]);

 app.directive("autoComplete", function(autoCompleteDataService) {
return {
restrict: "A",
link: function(scope, elem, attr, ctrl) {
$(elem).autocompleteArray(autoCompleteDataService.getSource(), {
minLength: 2
});
}

}})

Code du contrôleur (Nom du fichier Controller.js)

  function  MyController($scope){
this.getFirstName= function ()
{
var arrayFName=[];
for(var k=0;k< $scope.MyData.length;k++)
{
arrayFName.push($scope.MyData[k].fname);
}
return arrayFName;
}

MyData est un tableau contenant une valeur codée en dur pour "fname"

Quand j'ai exécuté ce code, j'ai eu l'erreur "Erreur: MyController n'est pas défini". Est-il possible d'extraire des données du contrôleur si oui, alors comment?

Réponses:

1 pour la réponse № 1

Vous devriez avoir la source, ou firstName, défini en usine, puis configurez-le à partir du contrôleur. Il sera alors accessible à partir d’autres contrôleurs utilisant l’usine.

var app=angular.module("myApp",[])

app.factory("autoCompleteDataService", [function () {
var _source;
return {
getSource: function () {
return _source;
},
setSource: function (source) {
_source = source;
}
}
}]);

Et puis les contrôleurs ultérieurs pourraient être comme:

app.controller("someController", ["$scope", "autoCompleteDataService",
function ($scope, autoCompleteDataService) {
$scope.source = autoCompleteDataService.getSource();

// or even...
// $scope.getFirstName = autoCompleteDataService.getSource;
}]);