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