/ / Cómo obtener datos del controlador a la fábrica en angularjs - javascript, angularjs, angularjs-directiva

Cómo obtener datos del controlador a la fábrica en angularjs - javascript, angularjs, angularjs-directiva

Soy novato en el mundo de Angularjs. Quiero obtener algunos datos del controlador angularjs a Angularjs Factory. El controlador y la fábrica están definidos en diferentes archivos js.

código de fábrica (nombre de archivo 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
});
}

}})

Código del controlador (Nombre de archivo 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 es una matriz que contiene algún valor codificado para "fname"

Cuando ejecuté este código obtuve el error "Error: MyController no está definido". ¿Es posible obtener datos del controlador? Si es así, ¿cómo?

Respuestas

1 para la respuesta № 1

Usted debe tener fuente, o firstName, definido en la fábrica, y luego configurarlo desde el controlador. Entonces será accesible desde otros controladores que usan la fábrica.

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

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

Y luego los controladores posteriores podrían ser como:

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

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