Javascript 如何在angularjs中从控制器到工厂获取数据

Javascript 如何在angularjs中从控制器到工厂获取数据,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我是Angularjs世界的新手。我想从angularjs控制器获取一些数据到angularjs工厂。控制器和工厂在不同的js文件中定义 工厂代码(文件名Application.js) }])) 控制器代码(文件名Controller.js) 函数MyController($scope){ this.getFirstName=函数() { var arrayFName=[]; 对于(var k=0;k

我是Angularjs世界的新手。我想从angularjs控制器获取一些数据到angularjs工厂。控制器和工厂在不同的js文件中定义

工厂代码(文件名Application.js)

}]))

控制器代码(文件名Controller.js)

函数MyController($scope){
this.getFirstName=函数()
{
var arrayFName=[];
对于(var k=0;k<$scope.MyData.length;k++)
{
arrayFName.push($scope.MyData[k].fname);
}
返回arrayFName;
}
MyData是一个数组,包含“fname”的某些硬编码值


当我运行此代码时,出现错误“error:MyController未定义”。是否可以从控制器中获取数据?如果是,则如何获取数据?

您应该在工厂中定义source,或
firstName
,然后从控制器中进行设置。然后可以从使用工厂的其他控制器访问它

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

app.factory('autoCompleteDataService', [function () {
    var _source;
    return {
        getSource: function () {
            return _source;
        },
        setSource: function (source) {
            _source = source;
        }
    }
}]);
随后的控制器可能如下所示:

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

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

您不希望从控制器获取数据,而是希望从服务获取数据到控制器。您还应该在角度模块上定义控制器:
app.controller('myController',['$scope',function($scope){…}])
按照您的设置方式,您试图在服务中调用
getSource
,而这反过来又从您的控制器调用
getFirstName
。在该控制器中,您应该做的是
setSource()
(或者
setFirstName
,这会更有意义)。现在,任何后续请求都不会调用控制器(
MyController.getFirstName()
)但是对于服务(
autoCompleteDataService.getSource()
)…什么不起作用?您是否制作了一个
setSource
函数,并从控制器调用它,以便将
\u source
设置为您想要在
autoCompleteDataService
中获取的对象?
  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;
  }
var app=angular.module('myApp',[])

app.factory('autoCompleteDataService', [function () {
    var _source;
    return {
        getSource: function () {
            return _source;
        },
        setSource: function (source) {
            _source = source;
        }
    }
}]);
app.controller('someController', ['$scope', 'autoCompleteDataService',
    function ($scope, autoCompleteDataService) {
        $scope.source = autoCompleteDataService.getSource();

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