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 № 1Vous 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;
}]);